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 MI
Válasz az MI-től
Java-ban:
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b); // true
System.out.println(c == d); // false
Magyarázat:
A Java cache-eli az Integer objektumokat -128 és 127 között. Ezért az a és b ugyanarra az objektumra mutatnak, és az == összehasonlítás true-t ad. A határon kívüli értékekhez új objektumokat hoz létre, így a c == d hamis lesz.
Go-ban:
package main
import "fmt"
func main() {
x := 1
defer func() { fmt.Println("defer:", x) }()
x = 2
fmt.Println("most:", x)
}
A kimenet:
most: 2
defer: 2
Magyarázat:
Go-ban a defer-rel késleltetett függvények a változókat referencia szerint fogják meg, nem érték szerint. Ezért, amikor a késleltetett függvény fut, az x értéke már 2.