java integer常量池_为什么Integer常量池的行为在127发生变化?
不,數字常量池的工作方式不同于字符串。對于字符串,只保留編譯時常量-而對于整數類型的包裝器類型,如果任何裝箱操作都適用于該值,則任何裝箱操作都將始終使用該池。因此,例如:
int x = 10;
int y = x + 1;
Integer z = y; // Not a compile-time constant!
Integer constant = 11;
System.out.println(z == constant); // true; reference comparison
JLS保證池值的范圍很小,但是實現可以根據需要使用更大的范圍。
請注意,盡管不能保證,但是我看過的每個實現都可以Integer.valueOf用來執行裝箱操作-因此,即使沒有該語言的幫助,您也可以得到相同的效果:
Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
System.out.println(x == y); // true
從JLS的5.1.7節開始:
如果裝箱的值p為true,false,一個字節或介于\ u0000到\ u007f范圍內的char或-128到127(含)之間的整數或短數,則令r1和r2為p的任何兩次拳擊轉換。r1 == r2總是這樣。
理想情況下,將給定的原始值p裝箱將始終產生相同的參考。實際上,使用現有的實現技術可能不可行。以上規則是一種務實的妥協。上面的最后一個子句要求始終將某些通用值裝在無法區分的對象中。該實現可以懶惰地或急切地緩存它們。對于其他值,此公式不允許對程序員方面的帶框值的身份進行任何假設。這將允許(但不要求)共享部分或全部這些引用。
這樣可以確保在大多數情況下,行為都是理想的,而不會造成不必要的性能損失,尤其是在小型設備上。例如,較少內存限制的實現可能會緩存所有char和short值,以及-32K到+ 32K范圍內的int和long值。
總結
以上是生活随笔為你收集整理的java integer常量池_为什么Integer常量池的行为在127发生变化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求二叉树中结点个数代码java_求二叉树
- 下一篇: 英特尔核芯显卡控制面板没有了_只认性能你