Integer 自动装箱机制
Integer a1 = 100; Integer a2 = 100; System.out.println(a1 == a2); // true Integer b1 = new Integer(100); Integer b2 = new Integer(100); System.out.println(b1 == b2); // false Integer c1 = 150; Integer c2 = 150; System.out.println(c1 == c2); // false
碰见这段代码,会让人很头疼,下面我就这样来解释下
1:Integer是有一个取值范围的(-128~127)
这个值是这样得到的
int min = 0; int max = 0; Integer a; Integer b; for(int i = -9999 ; i<9999;i++){ a = i; b = i; if(a == b){ min = i; break; } } for(int i = min;i<9999;i++){ a = i; b = i; if(a != b){ max = i-1; break; } } System.out.println(min+"~"+max); //-128~127
2.下面我用一段代码来解释下为什么第一段代码会有那样子的结果。
//a1和a2是两个对象,用==判断时由于对象的引用不同则输出false Integer a1 = new Integer(123); Integer a2 = new Integer(123); System.out.println(a1 == a2); //Integer的取值范围是-128~127 //当给Integer赋值超出了Integer的取值范围时,则会自动创建对象 //Integer c1 = new Integer(654); //Integer c2 = new Integer(654); //这样子用==判断时,则判断对象引用地址是否同一个 Integer b1 = 111; Integer b2 = 111; Integer c1 = 654; Integer c2 = 654; System.out.println(b1 == b2); System.out.println(c1 == c2);
这个就是自动装箱机制的结果