java基本数据类型
数据类型分为两大类,下面详细介绍基本数据类型:
1.基本数据类型的字节数和范围
注意:整数默认是int类型,浮点数默认是double,long类型的数要加l或者L,单精度的浮点数要加F或f
1、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
2、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)
类型 | 占用字节 | 最小值 | 最大值 |
---|---|---|---|
boolean | 1字节 | ||
byte | 1字节 | -2^7 | 2^7 - 1 |
short | 2字节 | -2^15 | 2^15 - 1 |
int | 4字节 | -2^31 | 2^31-1 |
long | 8字节 | -2^63 | 2^63-1 |
char | 2字节 | -128 | 127 |
float | 4字节 | 2^-149 | 2^128-1 |
double | 8字节 | 2^-1074 | 2^1024-1 |
2.数据类型转换
1.boolean类型不参与转换
2.默认转换
- (1).从小到大
- (2)byte,short,char -- int -- long -- float -- double
- (3)byte,short,char之间不相互转换,直接转成int类型参与运算
3.强制转换
- (1)从大到小
- (2)可能会有精度损失,一般不建议这样使用
- (3)格式:目标数据类型 变量名 = (目标数据类型)被转换的数据
4.思考题
- (1)下面两种方式有区别吗
float f1 = 12.345f;
float f2 = (float)12.345;
执行都没有问题但是f1是正常赋值,f2是double转换来的,转换就要截取double的4个字节这样容易丢精度
- (2)下面的程序有问题吗,如果有,在哪里呢
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
有问题,第三行会报错,两个byte类型的数据运算会转换成int类型,第四行没错,因为在对应的class文件中我们会看到在编译完成后就成了 byte = 7,然后看是否在byte的范围内,如果在就不报错
- (3)下面的操作结果是什么呢?
byte a = 130;
byte b = (byte)130;
第一行会报错,因为超出了byte的范围
第二行计算过程:
A:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
10000010
这个结果是补码。
C:已知补码求原码
符号位 | 数值位 | |
---|---|---|
补码 | 1 | 0000010 |
反码 | 1 | 0000001 |
原码 | 1 | 1111110 |
- (4)字符参与运算
System.out.println('a');//结果:a
System.out.println('a' + 1);//结果:98
- (5)字符串参与运算
System.out.println("hello"+'a'+1);//helloa1
System.out.println('a'+1+"hello");//98hello
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5