byte 占一個(gè)字節(jié) , 8 位 , -128到127
Byte 內(nèi)部有一個(gè) ByteCache 內(nèi)部類(lèi)來(lái)維護(hù)byte類(lèi)的實(shí)例創(chuàng)建,可以更好復(fù)用對(duì)象的實(shí)例;
Byte cache[] = new Byte[-(-128) + 127 + 1]; //初始化一個(gè)256個(gè)大小容量的數(shù)組(奶瓶)
- 類(lèi)中聲明了一個(gè)靜態(tài)final的數(shù)組,
- 并用靜態(tài)代碼塊默認(rèn)初始化了數(shù)組的大小 -127到128;
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Byte((byte)(i - 128));//給這個(gè)數(shù)組大奶瓶附上值(-128到127)
}
在我們調(diào)用的時(shí)候
public static Byte valueOf(byte b) {//規(guī)定你只能傳遞類(lèi)型為byte,那么值就是-127到128,
final int offset = 128;
return ByteCache.cache[(int)b + offset];//加上128,那么也不會(huì)超過(guò)256這個(gè)奶瓶的容器大小,取出數(shù)組中的數(shù)據(jù)輔值返給我們
}
- 補(bǔ)充知識(shí) , 如果一個(gè)類(lèi)默認(rèn)調(diào)用的時(shí)候(加載的時(shí)候)會(huì)先調(diào)用
1.static的靜態(tài)塊
2.然后調(diào)用構(gòu)造代碼塊
3.執(zhí)行初始化成員變量,我們new了一個(gè)對(duì)象Inner *默認(rèn)jvm會(huì)給成員變量賦值0,或null ; 類(lèi)的成員變量無(wú)論是否賦值座泳,都會(huì)在各種初始化之前早已被設(shè)置為二進(jìn)制0或null了蛆封。
static {
System.out.println("static");
}
{
System.out.println("{}");
}
private Inner i = new Inner(); //a private member
class Inner {
public Inner() {
System.out.println("我是成員變量對(duì)象的構(gòu)造方法");
}
}
打印為
static
{}
我是成員變量對(duì)象的構(gòu)造方法
小測(cè)試:
Byte aByte1 = Byte.valueOf((byte) 11111);
Byte aByte3 = Byte.valueOf((byte) 11111);
//上面這個(gè)2個(gè)利用緩存機(jī)制,所以就是一個(gè)對(duì)象,而且地址和內(nèi)容都一樣
Byte aByte2 = new Byte("103");//新創(chuàng)建一個(gè)對(duì)象,但是內(nèi)容和aByte1和aByte3是一樣的
System.out.println(aByte1==aByte2);
System.out.println(aByte1.equals(aByte2));
aByte2 = Byte.valueOf((byte) 11111);
System.out.println(aByte1);
System.out.println(aByte1==aByte2);
System.out.println(aByte1==aByte3);
System.out.println(aByte1.equals(aByte2));
結(jié)果:
false
true
103
true
true
true
而==比較的是對(duì)象的引用值纱,equals比較的是對(duì)象的內(nèi)容滓侍。