淺談java常量池
java常量池技術(shù)
java中常量池技術(shù)說的通俗點就是java級別的緩存技術(shù),方便快捷的創(chuàng)建一個對象。當需要一個對象時,從池中去獲取(如果池中沒有,就創(chuàng)建一個并放入池中),當下次需要相同變量的時候,不用重新創(chuàng)建,從而節(jié)省空間。
java八種基本類型的包裝類和對象池
java中的基本類型的包裝類、其中Byte、Boolean、Short、Character、Integer、Long實現(xiàn)了常量池技術(shù),(除了Boolean,都只對小于128的值才支持)
比如,Integer對象
Integer i1 = 100; Integer i2 = 100; // 上面兩行代碼,使用自動裝箱特性,編譯成 // Integer i1 = Integer.valueOf(100); // Integer i2 = Integer.valueOf(100); System.out.println(i1 == i2); Integer i3 = 128; Integer i4 = 128; System.out.println(i3 == i4);
執(zhí)行結(jié)果:
true false
原因我看下Integer對象的valueOf()的源碼
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
// 對于不在這個范圍的就重新創(chuàng)建一個Integer對象
return new Integer(i);
}
對于-128~127的Integer對象才會到IntegerCache里獲取緩存,使用常量池技術(shù)。
private static class IntegerCache { ... static final Integer cache[];
// IntegerCache類的cache是用final修飾的,是個靜態(tài)數(shù)組,起到緩存的作用}
String類的常量池
String類型的常量池比較特殊,String類常量池在jdk7中放在了java heap中。使用方法包括:
•直接使用字面量聲明,如String s = "abc";
•使用String.intern();
以上這篇淺談java常量池就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis分頁的實現(xiàn)及使用注解開發(fā)操作
這篇文章主要介紹了Mybatis分頁的實現(xiàn)及使用注解開發(fā)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
MyBatis使用注解開發(fā)和無主配置文件開發(fā)的情況
這篇文章主要介紹了MyBatis使用注解開發(fā)和無主配置文件開發(fā)的情況,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
淺談Spring Data Redis讀不到設(shè)進去的值
本文主要介紹了Spring Data Redis怎么讀不到我剛才設(shè)進去的值,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
mybatis整合springboot報BindingException:Invalid?bound?stateme
這篇文章主要給大家介紹了關(guān)于mybatis整合springboot報BindingException:Invalid?bound?statement?(not?found)異常的解決辦法,這個錯誤通常是由于Mapper文件中的statement?id與Java代碼中的方法名不一致導致的,需要的朋友可以參考下2024-01-01

