Principal
public class Main { public static void main(String[] args) { Integer a = 127; Integer b = 127; Integer c = 128; Integer d = 128; System.out.println(a == b); System.out.println(c == d); } } package main import "fmt" func main() { x := 1 defer func() { fmt.Println("defer:", x) }() x = 2 fmt.Println("now:", x) }
sobes.tech IA
Réponse de l'IA
En Java :
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b); // true
System.out.println(c == d); // false
Explication :
Java met en cache los objetos Integer en el rango de -128 a 127. Por lo tanto, a y b hacen referencia al mismo objeto, y la comparación == devuelve true. Para valores fuera de este rango, se crean nuevos objetos, por lo que c == d es false.
En Go :
package main
import "fmt"
func main() {
x := 1
defer func() { fmt.Println("defer:", x) }()
x = 2
fmt.Println("now:", x)
}
La sortie sera :
now: 2
defer: 2
Explication :
En Go, les fonctions différées avec defer capturent les variables par référence, pas par valeur. Par conséquent, lorsque la fonction différée s'exécute, la valeur de x est déjà 2.