2013-07-20 5 views
1
public class Wrap 
{ 
public static void main(String args[]) 
{ 
Integer a =1000; 
Integer b =1000; 
System.out.println(a == b); //line 7 
Integer c = 10; 
Integer d = 10; 
System.out.println(c == d); // line 10 
} 
} 

Понимаемая часть: В строке 7 он сравнивает ли со ссылкой ссылкой на переменную же объекта или нет. И в строке 10 сравниваются фактические примитивные данные, которые хранится в объекте-оболочке.Упаковочный Autoboxing

То, что я нашел: Если значение находится в пределах от -128 до 127 будет сравнивать элементарное значение, либо проверить, является ли переменная ссылочного типа имеет в виду тот же объект

Мой вопрос: Почему это так? Есть ли какая-то логика? Это логика любого использования? Или это просто способ оракула, чтобы сказать, как java отличается от других языков.

+0

1000 may of не может этого сделать. Попробуйте '-XX: + AggressiveOpts' –

+0

Существует некоторое кэширование, по какой-то нечетной причине, поэтому сравнение работает для этого диапазона. – arynaq

ответ

2

Понимаемая часть: В строке 7 сравнивается, ссылается ли эталонная переменная на тот же объект или нет.

правильно

И в строке 10 его сравнение фактического примитива данных, который содержит объект обертки.

Нет, он делает то же самое.

То, что я нашел: Если значение находится в пределах от -128 до 127 будет сравнивать элементарное значение, либо проверить, является ли переменная ссылочного типа имеет в виду тот же объект

Это диапазон по умолчанию для кэша Integer. Это справедливо для других целочисленных типов и булевых.

Мой вопрос: почему это так?

Для улучшения производительности.

Есть ли какая-либо логика?

См Integer.valueOf (интермедиат)

Это логика любого использования?

Сохранение мусора.

Или это просто способ оракула сказать, как java отличается от других языков.

Возможно, идея Солнца действительно.

+0

Не могли бы вы подробнее рассказать о том, что такое кеш целого и как он сохраняет мусор –

+1

@RohanPujari Целочисленный кеш, кеши целые. т. е. вместо того, чтобы давать вам новый каждый раз, когда он получает один из массива.Это избавляет от мусора, не давая вам новый объект каждый раз и повторно используя его в своем массиве. Вы хотите сделать это, потому что, хотя создание объектов дешево, делайте это достаточно, и это добавляет. Не создавать объект можно в 5 раз быстрее. –

Смежные вопросы