java属于强类型语言,数据类型包括两大类:
-
基本数据类型
整型 : byte(字节整型) short(短整型) int(整型) long(长整型) 浮点型 : float(单精度浮点型) double(双精度浮点型) 字符型 :char 布尔型 :boolean
-
引用类型
类 接口 数组 ... ...
它们所表示的范围是:
- byte -128 ~ 127
- short -2^15 ~ 2^15 - 1
- int -2^31 ~ 2^31 - 1
//在定义long类型后面加 l ,因为计算机整型默认int,如果不加 l 会报错
long l = 4569874521l;
/*
也有的long类型并没有在后面加 l ,这是因为当前数的范围在int类型以内,
如果超过了int类型的表示范围,必须要加上 l 。
*/
long l2 = 6987452;
类型转换
自动类型转换——小类型——>大类型(比如int——>long)
强制类型转换——大类型——>小类型 语法:(转换类型)变量
//将long转换为int
long l = 4569874521l;
System.out.println(l);
int i = (int)l;
System.out.println(i);
下面来看这样一段代码
byte b = 127;
byte c = (byte) (b + 1);
System.out.println(c);
输出的结果是-128,这是因为计算机内部是用补码进行加减运算,补码的出现解决了反码计算差1的问题,还解决正负0的问题。
因为byte类型只占8bit,127+1结果为128,二进制表示是10000000,在补码的表示中0用00000000表示,符号位占一位,理论上来说,0的表示可以有两种:+ 0 和 - 0 ,但实际上用 + 0 表示 0 ,而 - 0 也就是10000000表示 -128。如果是无符号数的运算结果为128,但是这是byte类型,10000000表示-128,所以输出的结果也就是-128而不是128。