Назад к вопросам
Principal
22
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) }
Компании, где спрашивали
Black Wall Group
Ответ от нейросети
sobes.tech AI
В 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
Объяснение:
Java кэширует объекты Integer в диапазоне от -128 до 127. Поэтому a и b ссылаются на один и тот же объект, и сравнение == возвращает true. Для значений вне этого диапазона создаются новые объекты, поэтому c == d — false.
В Go:
package main
import "fmt"
func main() {
x := 1
defer func() { fmt.Println("defer:", x) }()
x = 2
fmt.Println("now:", x)
}
Вывод будет:
now: 2
defer: 2
Объяснение:
В Go функции, отложенные с помощью defer, захватывают переменные по ссылке, а не по значению. Поэтому при выполнении отложенной функции значение x уже равно 2.