int a=10;
int b=10;
System.out.println(a==b)//true
int c=128;
int d=128;
System.out.println(c==b)//false
为什么这里为false?
总所周知==在比较数值时是比较的内存地址
解答:因为Integer在常量池中存储的范围是【-128>>127】 当超过了这个范围后,就会在堆中创建对象来存储,所以两者的地址会不一致。
本文深入探讨了Java中Integer缓存机制的工作原理。解释了为何在特定范围内(-128到127)的Integer对象可以直接通过==进行比较,而超出此范围的对象则需使用equals方法。这是因为Integer在常量池中存储的范围限制,超过该范围将创建新的对象实例,导致内存地址不同。
int a=10;
int b=10;
System.out.println(a==b)//true
int c=128;
int d=128;
System.out.println(c==b)//false
为什么这里为false?
总所周知==在比较数值时是比较的内存地址
解答:因为Integer在常量池中存储的范围是【-128>>127】 当超过了这个范围后,就会在堆中创建对象来存储,所以两者的地址会不一致。
728
765

被折叠的 条评论
为什么被折叠?