JDK原始碼解析 Integer類使用了享元模式

2021-10-20 00:19:29 字數 1014 閱讀 9769

我們先看下面的例子:

public class demo 

}

執行上面**,結果如下:

}上面**可以看到,直接給integer型別的變數賦值基本資料型別資料的操作底層使用的是valueof(),所以只需要看該方法即可

public final class integer extends number implements comparable

private static class integercache catch( numberformatexception nfe)

}high = h;

cache = new integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new integer(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >= 127;

}​ private integercache() {}}}

可以看到integer預設先建立並快取-128 ~ 127之間數的integer物件

當呼叫valueof時如果引數在-128 ~ 127之間則計算下標並從快取中返回,

否則建立乙個新的integer物件。

JDK原始碼閱讀 Integer

先上一版字串轉數值的幾個方法的區別 parseint string s 解析字串數,10進製,返回int parseint string s,int radix 解析字串數,radix為指定進製,支援2 36進製 decode string nm 解析字串數,0開頭的為8進製,如010解析為2 0x...

Integer原始碼解析

public class test else integer i3 200 integer i4 200 if i3 i4 else 結果為 原因integer 類會快取 128 到 127 之間的整數 但是如果new interger的話就是不同的物件了 源 分析 如果是在 128到正的127之間...

Integer原始碼(toString)解析

public static string tostring int i 同樣,為了便於理解,我舉個具體的例子 integer.tostring 173 1 int size i 0 stringsize i 1 stringsize i 看這一行的stringsize i 方法 判斷這個value ...