初始化默認(rèn)值,占用字節(jié),取值范圍,值傳遞和引用傳遞


一位bit可以表示0或1,一字節(jié)byte等于8位0或1,2^8
java中的整型都是有符號(hào)的,會(huì)占去一位bit,所以 byte 取 -2^7 + 0 + 2^7-1
摘自貼吧大神dtph007
有符號(hào)的整數(shù)類型使用的是2的補(bǔ)碼算術(shù)運(yùn)算:為了對(duì)一個(gè)數(shù)值取其負(fù)值,你要反轉(zhuǎn)其每一位,然后加1,從而得到結(jié)果[JLS 15.15.4]。
2的補(bǔ)碼算術(shù)運(yùn)算的一個(gè)很大的優(yōu)勢(shì)是,0具有唯一的表示形式。
如果你要對(duì)int數(shù)值0取負(fù)值,你將得到0xffffffff+1,它仍然是0。
但是,這也有一個(gè)相應(yīng)的不利之處,總共存在偶數(shù)個(gè)int數(shù)值——準(zhǔn)確地說有232個(gè)——其中一個(gè)用來表示0,這樣就剩些奇數(shù)個(gè)int數(shù)值來表示正整數(shù)和負(fù)整數(shù),這意味著正的和負(fù)的int數(shù)值的數(shù)量必然不相等。
這暗示著至少有一個(gè)int數(shù)值,其負(fù)值不能正確地表示成為一個(gè)int數(shù)值。
事實(shí)上,恰恰就有一個(gè)這樣的int數(shù)值,它就是Integer.MIN_VALUE,即-2^31。
他的十六進(jìn)制表示是0x80000000。其符號(hào)位為1,其余所有的位都是0。
如果我們對(duì)這個(gè)值取負(fù)值,那么我們將得到0x7fffffff+1,也就是0x80000000,即Integer.MIN_VALUE!
換句話說,Integer.MIN_VALUE是它自己的負(fù)值,Long.MIN_VALUE也是一樣。
對(duì)這兩個(gè)值取負(fù)值將會(huì)產(chǎn)生溢出,但是Java在整數(shù)計(jì)算中忽略了溢出。其結(jié)果已經(jīng)闡述清楚了,即使它們并不總是你所期望的。
| 類型 | 占用字節(jié) | 取值范圍 | 初始化默認(rèn)值 |
|---|---|---|---|
| byte | 1 | -128~127(2^8 = 256 = -2^7 + 0 + 2^7-1) | 0 |
| short | 2 | -32768~32767(2^16 = 65536 = -2^15 + 0 + 2^15) | 0 |
| int | 4 | -2147483648~2147483647(2^32 = -2^31 + 0 + 2^31-1)負(fù)20億,正20億 | 0 |
| long | 8 | -2^63 ~ 2^63 -1(2^64 = -2^63 +0+2^63-1) | 0L |