Сначала посмотрим результат теста:
/*public static void main (string [] args) {integer a = 128, b = 128; Целое число C = 127, D = 127; System.out.println (a == b); // false System.out.println (c == d); // true}*//*public static void main (string [] args) {integer int1 = integer.valueof ("100"); Integer int2 = integer.valueof ("100"); System.out.println (int1 == int2); // true}*/public static void main (string [] args) {integer int1 = integer.valueof ("300"); Integer int2 = integer.valueof ("300"); System.out.println (int1 == int2); // false}Исходный код JDK заключается в следующем:
public static integer value (String s) Throws numberFormateXception {return Integer.valueof (parseint (s, 10)); } public static integer valueof (int i) {if (i> = integerCache.low && i <= integerCache.high) return integerCache.cache [i + (-integercache.low)]; вернуть новое целое число (i); }Я обнаружил, что внутри была еще одна загадка, и был класс IntegerCache:
Частный статический класс integercache {static final int low = -128; Статический финал int High; Статический конечный целочисленный кеш []; static {// высокое значение может быть настроено Property int h = 127; String integercachehighpropvalue = sun.misc.vm.getsavedproperty ("java.lang.integer.integercache.high"); if (integercachehighpropvalue! = null) {try {int i = parseint (integerCacheHighPropValue); i = math.max (i, 127); // максимальный размер массива IS integer.max_value h = math.min (i, integer.max_value -(-low) -1); } catch (numberFormateXception nfe) {// Если свойство не может быть проанализировано в int, игнорируйте его. }} high = h; cache = new Integer [(High - low) + 1]; int j = низкий; for (int k = 0; k <cache.length; k ++) cache [k] = новое целое число (j ++); // диапазон [-128, 127] должен быть интернализован (JLS7 5.1.7) Assert integerCache.high> = 127; } private integerCache () {}}Оказывается, что целое число создает все целые числа от -128 до 127 (регулируемые).
Это объясняет ответ. Оказывается, независимо от того, сколько целых чисел вы создаете в этом диапазоне, все они используют значение для создания одного и того же объекта.
Но почему JDK должен так много делать? Давайте внимательно подумаем об этом. Большинство продуктов Taobao по цене менее 100 юаней. Сколько целых чисел будет использоваться на бэкэнд -сервере за один день? Используя IntegerCache, он сокращает время, чтобы стать новым и повысить эффективность. В то же время, JDK также обеспечивает конфигурацию высокого значения кэша.
Это, несомненно, улучшает гибкость и облегчает оптимизацию JVM.
Суммировать
Выше приведенное содержание этой статьи о чтении исходного кода IntegerCache, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!