Integeter127与128
Posted jackkke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Integeter127与128相关的知识,希望对你有一定的参考价值。
1 package com.hangao.basic; 2 3 /** 4 * @author hangao [email protected] 5 * 6 */ 7 public class TestInt { 8 public static void main(String[] args) { 9 Integer ie1 = 127; 10 Integer ie2 = 127; 11 System.out.println("Integer 127==127:" + (ie1 == ie2));//Integer 127==127:true 12 13 Integer ie3 = new Integer(127); 14 Integer ie4 = new Integer(127); 15 System.out.println("new Integer 127==127:" + (ie3 == ie4));//new Integer 127==127:false 16 17 Integer ie5 = 128; 18 Integer ie6 = 128; 19 System.out.println("Integer 128==128:" + (ie5 == ie6));//Integer 128==128:false 20 21 Integer ie7 = new Integer(128); 22 Integer ie8 = new Integer(128); 23 System.out.println("new Integer 128==128:" + (ie7 == ie8));//new Integer 128==128:false 24 25 analysis(); 26 } 27 28 private static void analysis() { 29 Integer ie0 = 127; 30 System.out.println(ie0); 31 /* L0 32 LINENUMBER 5 L0 33 BIPUSH 127 34 INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer; 35 ASTORE 1*/ 36 /*从字节码文件可以看出此处有一个自动装箱的动作*/ 37 38 /*public static Integer valueOf(int i) { 39 if (i >= IntegerCache.low && i <= IntegerCache.high) 40 return IntegerCache.cache[i + (-IntegerCache.low)]; 41 return new Integer(i); 42 }*/ 43 /*而Integeter这个类的装箱过程从Integeter源代码可以看出在(-128 - 127)之间的int值 44 其实返回的是IntegerCache里面的cache[]数组里面的对象*/ 45 46 /*private static class IntegerCache { 47 static final int low = -128; 48 static final int high; 49 static final Integer cache[]; 50 51 static { 52 // high value may be configured by property 53 int h = 127; 54 String integerCacheHighPropValue = 55 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); 56 if (integerCacheHighPropValue != null) { 57 try { 58 int i = Integer.parseInt(integerCacheHighPropValue); 59 i = Math.max(i, 127); 60 // Maximum array size is Integer.MAX_VALUE 61 h = Math.min(i, Integer.MAX_VALUE - (-low) -1); 62 } catch( NumberFormatException nfe) { 63 // If the property cannot be parsed into an int, ignore it. 64 } 65 } 66 high = h; 67 68 cache = new Integer[(high - low) + 1]; 69 int j = low; 70 for(int k = 0; k < cache.length; k++) 71 cache[k] = new Integer(j++); 72 73 // range [-128, 127] must be interned (JLS7 5.1.7) 74 assert IntegerCache.high >= 127; 75 } 76 77 private IntegerCache() {} 78 }*/ 79 /*IntegerCache是Integer的内部类,在被jdk加载的时候,会去初始化创建(-128 - 127)之间所有int值对应的Integer类数组 80 使用的时候可以从里面取*/ 81 } 82 }
以上是关于Integeter127与128的主要内容,如果未能解决你的问题,请参考以下文章