19 нояб. 2011 г.

java: autoboxing и ==

С появлением java 5 появилась и такая вещь как auto boxing, на мой взгляд штука скорее вредная, чем полезная, но не суть.

Наверняка многие java программисты сходу могут ответить на вопрос «какой будет результат ?»
        Integer a = 100;
        Integer b = 100;
        Integer c = 300;
        Integer d = 300;
        
        System.out.println(a == b);
        System.out.println(c == d);

Тем более, что многие книги, как то Java Puzzlers, упоминают об этом.

Всё бы ничего, да только вот многие не знают, что cache можно расширить, точнее его вернюю границу:
-Djava.lang.Integer.IntegerCache.high=300

и результат выше приведённого примера в обоих случаях будет true.

p.s. чем равно -Integer.MIN_VALUE ?

3 комментария:

tabbykitt3n комментирует...

-MIN_VALUE скорее всего равно MIN_VALUE

Анонимный комментирует...

У меня результат выполнения получился
true
false.

С моей точки зрения должно было быть
false
false.

Vladislav комментирует...

Integer.MIN_VALUE == 10000000000000000000000000000000;

операция унарного отрицания сначала инвертирует все знаки
~Integer.MIN_VALUE == 1111111111111111111111111111111
а затем прибавляет 1:
10000000000000000000000000000000
в итоге получаем, что Integer.MIN_VALUE == -Integer.MIN_VALUE