一、整型
1、byte
byte:字节型
- byte占用一个字节。
由于Java中不区分有符号数和无符号数,故一个字节有八位,一位用来描述符号,剩余位代表数值大小。
所以byte能表示的范围为-128~127。
2、short
short:短整型
- short占用两个字节。
- short能表示的范围为-32768 ~ 32767。
3、int
int:整型
- int占用四个字节。
- int所能表示的范围为
注意:Java是在Java虚拟机JVM中运行的,不管在32位还是64位操作系统,int都是四字节。
4、long
long:长整型
- long占用八个字节。
- long所能表示的范围为
二、浮点型
1、float
float:单精度浮点型
- float占用四个字节。
- float由于是浮点型数据,其范围一般不关注。
- 在给float类型变量赋值时,需要在其后加上f。
2、double
double:双精度浮点型
- double占用八个字节。
- double由于是浮点型数据,其范围一般不关注。
三、字符型
char
char:字符型
注意:Java与C++不同,Java中char占用两个字节。
一个字符的ascii码占用一个字节,unicode码占用两个字节。
四、布尔型
boolean
boolean:布尔型
- boolean可以取值为true和false,不存在0是假,非0是真的说法。
- boolean没有明确规定占用字节数。
注意:在给这八类数据类型赋值时,不能超过其最大表示范围。
五、强制类型转换
强制类型转换使用场景:大范围强制转换成小范围。
- 从小到大排序:byte->short->char->int->long->float->double
- 小范围转成大范围,会自动类型提升,也称为隐式转换。
- 在参与运算时,小于四字节的类型会自动提升为四字节。
- boolean类型的变量和其他类型的变量不能进行转换。
例题:
在此问题中a+2的结果是int,但是a还是short类型,所以应该进行强制类型转换。
注意:强制类型转换存在风险。
例题:
public static void main(String[] args) { int a=128; byte b=(byte)a; System.out.println("a="+a); System.out.println("b="+b); }
运行结果:
分析:
但是byte占一个字节(8个二进制位),能表示的范围为-128~127,128的时候对于byte来说符号为(最高位)1,表示负数,此时-128的补码恰好为为10000000。