什么情况下Integer用==判断可相等?String呢?

首先我们知道Integer和String的equals都重写过,比较的是对象的value字段,这个问题很简单.

而Integer和String用==判断时,比较的都是地址,就需要讨论了.


先说结论

使用直接赋值或valueOf()方法时,Integer和String都会查缓存,缓存中有就返回缓存中的地址,没有则新建.

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

 

知识补充

Integer类中有一个静态代码块,他初始化了一个cache数组,数组存的值是[-128,127],这是Integer的缓存范围,是不变的.

String类在jvm内存中有一个字符串常量池,你创建的新字符串常量会被加入其中,该池作为String的缓存.

 

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