Java基礎-Long簡析


  • Long 是long類型的包裝類型。
  • Long默認零值為null, long的默認零值為 0.
  • Long類中有個靜態的內部緩存類,用來緩存 -128 ~ 127 之間的long包裝對象實例,類加載的過程中會對LongCache的靜態代碼塊進行初始化,后面自動裝箱的 -128 ~ 127 之間的Long會直接返回緩存數組里面的對象引用。Long i = 125; 會直接指向靜態常量池里面的值。
//1. Long的內部類,當Class字節碼文件被加載的時候,會執行靜態代碼塊,對cache數組進行初始化。
private static class LongCache {
        private LongCache(){}
        static final Long cache[] = new Long[-(-128) + 127 + 1];
        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Long(i - 128);
        }
}
//2. 后面用Long.valueOf(Long l) 方法獲取對應的Long對象的時候,或者直接用“=”給Long類型變量賦值的話,如果緩存數組有,則直接返回緩存數據里的對象引用。
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}

//3. 注:如果用 new Long(x) 創建出來的對象始終在堆內存中。

//4. 該特性,int的包裝類型Integer類似。
  • Effective java中建議,在循環中不要使用包裝類型,會進行頻繁的裝箱和拆箱動作,嚴重影響性能。
  • 注意,long 賦值的時候,需要給數字后面帶“l”;

(復習筆記整理,若有出入后續修繕)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM