我遇到了一个非常奇怪的行为,后来发现它是 java 规范的一部分。让我把上述帖子中的相关代码
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 之间的 int 或短数字,则令 r1 和 r2 为任意两次装箱转换的结果p。r1 == r2 总是如此。
现在我的问题是,既然我们对字符串文字池没有限制,为什么其他类型不一样?没有这个的设计/性能考虑是什么?有什么办法可以配置吗?