我遇到了一个非常奇怪的行为,后来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对前面提到的帖子的回复。
If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
现在我的问题是,因为我们没有字符串文字池的限制,为什么不相同的其他类型?没有这个的设计/性能考虑是什么?有没有可配置的方法?
是的,自从Java 5.0(2004)以来,它就一直存在。 ;) – 2011-12-29 13:39:57
虽然文字实际上是原始文字,但您可以为包装类型设置某种“文字池”。但为什么要麻烦?有趣的情况是变量变量。当人们试图用常量值测试东西时,让'=='有不同的工作方式,可能不会成为后遗症。 – 2011-12-29 13:49:51