關於Integer物件的一些小知識

2021-07-22 16:24:05 字數 1056 閱讀 3086

之前有看見乙個題,題就不說了,最終結論是 integer物件在建立的時候,對於-128~127數字將會不會建立新的物件,而是直接應用常量池中integer物件。

然後最近,在stackoverflow看到乙個比較有意思的問題

public class test 

public static test getinstance()

public static void main(string args)

}

最終執行輸出的結果則是

null

abc為何是這個結果。如果把

public static final integer i = 4;
替換為

public static final int i = 4;
那麼列印的結果就會是4 和 abc

為何會這樣

因為在建立靜態常量的時候, integer i=4 最終呼叫的是 integer.valueof(4),而不是直接在常量池中建立物件。那麼導致的則是在初始化的時候,常量池中並沒有integer物件的值。

而string型別 則直接會在常量池中建立物件,所以可以直接呼叫該值。

所以在第一次初始化常量的時候,integer 由於內部產生物件呼叫的是integer.valueof()的方法,而常量池中並沒有相匹配的值,導致第一次初始化後integer是乙個空值。當第一次初始化結束後,integer常量物件才會產生相對應的值。

而之後在 new test();或者呼叫該例項化方法 getinstance() 是,才會顯示integer常量物件

public static void main(string args)
輸出結果為:
null
abc
4
abc

關於javaSE物件導向的一些小知識

一 物件導向 1 物件導向 是基於面向過程的一種思想。面向過程 以函式為基礎,關注實現過程,強調功能行為。物件導向 以物件為基礎,關注實現結果,強調具備了功能的物件。2,物件導向的思想特點 a 是一種更符合人們思考習慣的思想 b 把複雜的事情簡單化 c 把我們從執行者變成了指揮者。封裝 繼承多型 3...

關於編譯的一些小知識

gnu編譯器 g 編譯 c 程式 在windows下,進入源 所在的路徑下,在命令列中輸入 g o test.exe test.cpp將test.cpp 編譯生成 test.exe 可執行檔案,如果沒有 o test.exe 選項,預設生成 a.exe 在linux下,進入源 所在的路徑下,在命令列...

關於dialog的一些小結

1.自定義dialog繼承dialog,2.或者activity在mainifest中設定 android theme style commondialog android theme.dialog 或者 3.處理一些手機寬高不能與螢幕寬高等同問題 顯示在底部與螢幕寬度一樣 private void...