Давайте посмотрим на кусок кода:
открытый класс main {public static void main (string [] args) {integer num1 = 100; Целое число num2 = 100; Integer num3 = 200; Integer num4 = 200; '' '// вывод результата' 'System.out.println (num1 == num2); System.out.println (num3 == num4); }} Угадай, каков результат?
Многие люди думают, что результат правда, но результат не такой.
истинный
ЛОЖЬ
Почему этот результат? Если результат объясняется памятью, NUM1 и NUM2 указывают на один и тот же объект, в то время как NUM3 и NUM4 указывают на разные объекты. Далее, давайте скажем вам, почему, посмотрите на исходный код значения метода типа целочисленной:
public static integer value (int i) {assert integercache.high> = 127; if (i> = integercache.low && i <= integerCache.high) return integerCache.cache [i + 128]; вернуть новое целое число (i); }Реализация IntegerCache:
'' '// IntegerCache, внутренний класс, обратите внимание, что его свойства определяются как статический окончательный « '' '// Кэш Верхняя граница, временно нулевая' 'Статический конечный целочисленный кеш []; '' '// cache Integer Array' '' '' // block, почему он определяется как блок '' static {final int low = -128; '' '// Кэш нижний гранит, неизбежный. Только верхняя граница может изменить '' '' '' '' // Высокое значение может быть настроено с помощью свойства '' '' '' // H, которое можно скорректировать путем установки параметра JDK AutoboxCacheMax (есть объяснение ниже), а автоматический интервал кэша установлен на [-128, N]. Обратите внимание, что нижняя граница интервала является фиксированной int h = 127; if (integercachehighpropvalue! = null) {'' '// Использовать здесь long.decode, чтобы не призывать методов, которые «' '' '' '// требуют инициализации кеша автобоксинга целого числа, путем декодирования IntegerCacheHighPvalue, кандидатское верхнее значение получено' '' int i = = = = int i = = = Long.decode (integercachehighpropvalue) .intvalue (); '' '// принимайте большую как верхнюю границу, но он не может быть больше, чем граница целого числа max_value' '' i = math.max (i, 127); '' '// максимальный размер массива IS integer.max_value' 'h = math.min (i, integer.max_value - -low); } high = h; '' // верхняя граница определяется '' '' '' '// Вы можете создать блок кэша, обратить внимание на размер массива кэша' '' cache = новое целое число [(высокое - low) + 1]; // int j = low; for (int k = 0; k <cache.length; k ++) cache [k] = новое целое число (j ++); '' '// -128 на высокие значения выделяются на массив кэша один за один' ''} private integerCache () {}}Через эти два часа кода можно видеть, что при создании объекта целочисленного типа с помощью метода значения диапазон значений равен [-128, 127]. В этом интервале указатель указывает на ссылку на объект, уже существовавшую в integercache.cache. Когда значение превышает этот диапазон, будет создан новый объект.
Отнесее отметить, что не все типы в этом диапазоне, посмотрите на двойной тип:
открытый класс main {public static void main (string [] args) {double i1 = 100,0; Двойной i2 = 100,0; Двойной i3 = 200,0; Двойной i4 = 200,0; System.out.println (i1 == i2); System.out.println (i3 == i4); }}Окончательный результат вывода:
ЛОЖЬ
ЛОЖЬ
По конкретной причине, почему это результат, вы можете проверить реализацию двойного значения метода в исходном коде. Он отличается от метода целочисленного значения, потому что количество целочисленных значений в определенном диапазоне ограничено, но номера с плавающими темпами не являются.
Обратите внимание, что реализация значений методов целого числа, коротких, байта, характера и длинных аналогична.
Реализация значения метода двойного и плавания аналогична.
Вытяните один, и результаты логического типа имеют два истинного или ложного. Посмотрите прямо на исходный код:
public static boolean valueof (boolean b) {return (b? true: false); }Истина и ложь определены следующим образом:
Public Static Final Boolean True = new Boolean (true); '' '/**' '' '' '' ** объект <code> boolean </code>, соответствующий примитиву '' '' '' '* value <code> false </code>. '' '' '' **/'' '' '' '' ''*public static final boolean false = new Boolean (false);
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.