- Integer包装类在一定范围内生成的对象是相等的,在范围外则是不等的,这个范围是[-128,128)。
public static void main(String[] args){
Integer a = 4; Integer b = 4; System.out.println(a==b);//true Integer c = 159; Integer d = 159; System.out.println(c==d);//false }
这里我们要注意(1)Integer a = Integer.valueOf(4)。而不是(2)Integer a = new Integer(4)。这两种情况给是不相同的。
- (2)是新声明出一个对象。每声明出一个对象就会在堆内存中创建一个属于这个对象的地址。让我们看看代码块及运行结果
public static void main(String[] args){
Integer a = 4 Integer b = 4; Integer b1 = new Integer(4); Integer b2 = new Integer(4); System.out.println(b1==b2);//false System.out.println(b==b1);//false System.out.printlm(b==a);//true }
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
从源代码中我们可以看出传进来的i值大小在范围内[-128,128)之间则返回数组cache中已有的值。若不满足在新建一个Integer对象。我们可以理解为a,b都指向的是同一个地址(当数值相同时)。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202749.html原文链接:https://javaforall.net
