整型数在java语言中共4种类型:
byte 1个字节(最大值127)
short 2个字节(最大值32367)
int 4个字节(2147483647是int最大值,超了这个范围可以使用long类型)
long 8个字节
1个字节=8个二进制位
1byte=8bit
在java语言中整数型字面量有4种表示形式:
十进制:int a=10;
二进制:int b=0b10;(二进制以0b开始)(JDK8的新特性)
八进制:int c=010;(八进制以0开始)
十六进制:int d=0x10;(十六进制以0x开始)
在java中有一条非常重要的结论,在任何情况下,整数型的字面量默认被当作int来处理,如果希望该整数型自变量被当中long类型来处理,需要在字面量后加L,因为小写l和1很像,容易分不清楚.
long a=100;
100这个自变量被默认当作int类型来处理,b是Long类型,占8个字节,int类型占4个字节,小容量可以自动转换位大容量,这种操作被称为:自动类型转换.
long b=300L;
上面的赋值不存在类型转换,在300后面添加一个L后,300L就是一个long类型的字面量,long赋给long不存在类型转换.
long d=2147483647;
2147483647默认被当作int来处理,d变量是long类型,小容量可以自动赋值给大容量,自动类型转换.
long e=2147483648;
int类型放不下2147483648,所有编译前会报错,e是long类型,完全放得下2147483648,只不过2147483648已经超过了int的范围.解决方法就是在字面量后面加上一个L,让它看出long类型,就解决问题了.
大容量不能直接赋值给小容量,需要使用强制类型转换符进行强制转换.加了强制类型转换符后,虽然编译通过了,但是运行时可能会损失精度.
底层进行强制类型转换:
long类型的100L:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100;
以上的long类型100L强转为int类型,会自动将前面的4个字节砍掉:00000000 00000000 00000000 01100100;
java中有一个语法规则,当整数型字面量没有超出byte,或者short,char的取值范围,那么这个整数型字面量可以直接赋值给byte或者short,这种语法机制是为了方便写代码而存在的..