什麼情況下Integer用==判斷可相等?String呢?

首先我們知道Integer和String的equals都重寫過,比較的是對象的value字段,這個問題很簡單.

而Integer和String用==判斷時,比較的都是地址,就需要討論了.


先說結論

使用直接賦值或valueOf()方法時,Integer和String都會查緩存,緩存中有就返回緩存中的地址,沒有則新建.

使用new Integer()和new String()方法都不查緩存,直接創建新對象,返回新地址.

 

知識補充

Integer類中有一個靜態代碼塊,他初始化了一個cache數組,數組存的值是[-128,127],這是Integer的緩存範圍,是不變的.

String類在jvm內存中有一個字符串常量池,你創建的新字符串常量會被加入其中,該池作爲String的緩存.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章