相关疑难解决方法(0)

为什么不在Java中缓存整数?

我知道这个主题有类似的帖子,但它们并没有完全解决我的问题.当你这样做时:

Integer a = 10;
Integer b = 10;
System.out.println("a == b: " + (a == b));
Run Code Online (Sandbox Code Playgroud)

这将(显然)打印true大部分时间,因为[-128,127]范围内的整数以某种方式被缓存.但:

Integer a = new Integer(10);
Integer b = new Integer(10);
System.out.println("a == b: " + (a == b));
Run Code Online (Sandbox Code Playgroud)

会回来false.我理解我要求整数的新实例,但由于盒装原语在Java中是不可变的,并且机器已经在那里做"正确的事情"(如第一种情况所示),为什么会发生这种情况?

如果具有10的Integer的所有实例在内存中都是相同的对象,那会不会更有意义?换句话说,为什么我们没有"Integer interning",这类似于"String interning"?

更好的是,如果表示同一事物的盒装基元的实例(无论值(和类型)是否是同一个对象),它会更有意义吗?或者至少正确回答==

java autoboxing equality

25
推荐指数
3
解决办法
6167
查看次数

标签 统计

autoboxing ×1

equality ×1

java ×1