求java好手解释一下Integer的等于判断,本人学习java也有一定水平,实在费解
求java高手解释一下Integer的等于判断,本人学习java也有一定水平,实在费解Integer c 3Integer d 3In
求java高手解释一下Integer的等于判断,本人学习java也有一定水平,实在费解
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
System.out.println(c == d);
System.out.println(e == f);
输出 true false
Integer???相等 Java
[解决办法]
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
这是源码中的,也就是说cache中已有-128到127,不在这范围的会新new ,这时可以理解比较是内存地址,也就是是不是同一对象,并不是比较hashCode,hashcode相同对象不一样相同,毕竟hashcode是int大小是有限的,看来lz的==,equal,hashcode什么的还有待提高哈。。
[解决办法]Java的Reference问题
Java的对象在堆中,Java在方法在执行时,会为每个方法创建栈帧,并压入当前线程的栈,每个栈帧都保存有方法的变量,字节码,引用等信息,以<1>为例子,P1,P2在main方法的栈帧中很老实的指向堆中的两个对象。而在modifyPoint栈帧中,p2 = new Point(5,5);创建了一个新的对象,并将该栈帧中的p2指向堆中的新对象。
注意,此问题的根本原因是两个方法中的P2是指向同一个堆对象的不同引用,对引用本身的更改,在不同的栈帧中是不相影响的。
对于<2>也同样分析即可。