【发布时间】:2011-12-29 13:36:39
【问题描述】:
我遇到了一个非常奇怪的行为,后来found to be a part of java specs。让我把上述帖子中的相关代码放上去
Integer a = 1000, b = 1000;
System.out.println(a == b); //Prints false
Integer c = 100, d = 100;
System.out.println(c == d); //Prints true
这与字符串字面量池非常相似,但有一个限制。让我再次引用 Jon Skeet 对前面提到的帖子的回复。
如果被装箱的值p为真,假,一个字节,范围内的一个字符 \u0000 到 \u007f,或者一个介于 -128 和 127 之间的整数或短数字,然后 设 r1 和 r2 是 p 的任意两次装箱转换的结果。这是 总是 r1 == r2。
现在我的问题是,既然我们对字符串文字池没有限制,为什么其他类型不一样?没有这个的设计/性能考虑是什么?有什么办法可以配置吗?
【问题讨论】:
-
是的,它自 Java 5.0 (2004) 以来就一直存在,我在这个主题上写的已经足够多了。 ;)
-
您可以为包装类型提供某种“文字池”,尽管文字实际上是原语。但是为什么要打扰呢?有趣的案例是变量变量。当人们试图用常数值测试东西时,让
==以不同的方式工作可能不会有帮助。
标签: java autoboxing