一、数据类型
1.定义
在程序设计语言中,将数据占用存储单元的多少和对数据的操作方式等这两方面的性质抽象为数据类型。在我看来,数据类型就是内存占用的大小。
2.分类
Java的数据类型分为基本数据类型和引用数据类型,基本数据类型也称原始数据类型,其中包括(1)整数类型:byte、short、int、long(2)小数类型:float、double(3)字符类型:char
(4)布尔类型:boolean。引用数据类型包括类、接口类型、数组类型、 枚举类型 、注解类型,字符串型。
二、自动转换
下列条件成立时,Java自动进行数值类型之间的转换:①转换前的数值类型与转换后的类型兼容;②转换后数值类型的范围大于转换前数值类型的范围。
例如图1-1
最终结果如图下1-2所示
但是如果将大范围转小范围时,我们有什么办法解决呢?我们就得用以下方法。
三、强制类型转换
我们看以下案例:
你们觉得答案等于什么?其中的b又代表什么?
当运行此代码时,你会惊奇的发现,答案为-56。这是为什么呢?
这是因为b代表的是int类型,而将int强制转换为byte的话会发生信息丢生。int有4个字节,而byte只有1个字节。若将int强制转换为byte,那么前三个字节将会丢失。
我们来看以下解释:
200的二进制为00000000 00000000 00000000 11001000
而计算机底层都是以补码的形式做运算的。而200的二进制的字符位为0,代表正数。正数的原码、反码、补码一致。则其强转为byte时,则其原码为11001000,其字符位为1,代表负数。而负数的原码转为反码时,符号位不变,按位取反,则其反码为10110111;反码→补码时,反码+1,则其补码为10111000。
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 1 | 1 | 1 | 0 | 0 | 0 |
再将第二行为1的数字相加,则32+16+8=56,又因其符号位为1,则为-56