基本数据类型.md

初始化默认值,占用字节,取值范围,值传递和引用传递


基本数据类型.md_第1张图片
Java数据类型.jpg
基本数据类型.md_第2张图片
包装类继承层次结构.jpg

一位bit可以表示0或1,一字节byte等于8位0或1,2^8
java中的整型都是有符号的,会占去一位bit,所以 byte 取 -2^7 + 0 + 2^7-1

摘自贴吧大神dtph007
有符号的整数类型使用的是2的补码算术运算:为了对一个数值取其负值,你要反转其每一位,然后加1,从而得到结果[JLS 15.15.4]。
2的补码算术运算的一个很大的优势是,0具有唯一的表示形式。
如果你要对int数值0取负值,你将得到0xffffffff+1,它仍然是0。
但是,这也有一个相应的不利之处,总共存在偶数个int数值——准确地说有232个——其中一个用来表示0,这样就剩些奇数个int数值来表示正整数和负整数,这意味着正的和负的int数值的数量必然不相等。
这暗示着至少有一个int数值,其负值不能正确地表示成为一个int数值。
事实上,恰恰就有一个这样的int数值,它就是Integer.MIN_VALUE,即-2^31。
他的十六进制表示是0x80000000。其符号位为1,其余所有的位都是0。
如果我们对这个值取负值,那么我们将得到0x7fffffff+1,也就是0x80000000,即Integer.MIN_VALUE!
换句话说,Integer.MIN_VALUE是它自己的负值,Long.MIN_VALUE也是一样。
对这两个值取负值将会产生溢出,但是Java在整数计算中忽略了溢出。其结果已经阐述清楚了,即使它们并不总是你所期望的。

类型 占用字节 取值范围 初始化默认值
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)负20亿,正20亿 0
long 8 -2^63 ~ 2^63 -1(2^64 = -2^63 +0+2^63-1) 0L

你可能感兴趣的:(基本数据类型.md)