文章目录
- 一、Java的基本数据类型(4类8种)
- 1. 四大类
- 2. 八种类型
- 二、两个经典的数据类型转换例子(经典面试题)
- 1. +=运算符的数据类型转换
- 2. 常量与变量的数据类型转换
写Java算是很久了,正好最近重新捡起Java的基本知识看看发现很多东西竟然都要忘掉了,特意记录一下吧。
一、Java的基本数据类型(4类8种)
1. 四大类
(1)整型:byte、short、int(默认)、long
(2)浮点型:float、double(默认)
(3)字符型:char
(4)布尔型:boolean
2. 八种类型
数据类型 | 关键字 | 内存占用 | 取值范围 |
字节型 | byte | 1个字节 | -128~127 |
短整型 | short | 2个字节 | -32768~32767 |
整型 | int(默认) | 4个字节 | ~ |
长整型 | long | 8个字节 | ~ |
单精度浮点数 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0~65535 |
布尔类型 | boolean | 1个字节 | true,false |
建议:
- long类型:数据后加L或l表示
- float类型:数据后加F或f表示
二、两个经典的数据类型转换例子(经典面试题)
1. +=运算符的数据类型转换
先看第一个例子
short s = 1;
s = s + 1; // 编译失败
s = (short)(s + 1); // 编译成功
我们知道Java种整型的默认类型为int,因此s+1中的1为int型。当一个short类型与int类型相加,会进行隐式类型转换,将结果从short型提升为int型。之后再将int型赋值给short类型变量就会报错,需要强制类型转换。
short s = 1;
s += 1; // 编译成功
System.out.println(s);
s+=1虽然逻辑上等同于s=s+1,但其仍然是一个运算符。这里存在如下规则
- 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。
+=、-=、*=、/=、%=均适用这个规则
2. 常量与变量的数据类型转换
看这样一个例子
byte b1 = 1;
byte b2 = 2;
byte b3 = 1 + 2; // 编译成功
byte b4 = b1 + b2; // 编译失败
System.out.println(b3);
System.out.println(b4);
此处b3 = 1 + 2不报错的原因是因为1和2是常量,在编译的时候就已经执行了+运算符,并且确定了1+2的结果没有超过byte类型的取值范围,因此它的效果等同于b3=3。
而在b4=b1+b2中,b1和b2是变量,变量的值是可以变化的,编译时编译器javac不确定b1+b2的结果,因此会把结果以默认的int来进行处理,而int型不能赋值给byte型,所以编译失败。