一、java基本数据类型
Java提供了八种基本类型,其中包括六种数字类型(四个整数型,两个浮点型),一种字符类型和一种布尔型。
整型: short, int, long, byte;
浮点型:float, double;
字符型:char;
布尔型:boolean.
Java中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或操作系统的改变而改变。
二、非赋值运算,自动转换规则
1)布尔型不参与转换
2)规则: byte/char/short -> int -> long -> float -> double
2.1)例子:
public class Test {
public static void main(String[] args) {
short a = 1;
byte b = 2;
char c = 3;
//三个输出都是 class java.lang.Integer
System.out.println(getType(b+a));
System.out.println(getType(b+c));
System.out.println(getType(a+c));
}
public static String getType(Object o){
return o.getClass().toString();
}
}
2.2)规则具体讲解
(2.2.1)如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。
(2.2.2)如两操作数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。
(2.2.3)如两操作数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。
(2.2.4)如两操作数均不为double、float或long,则两操作数先被转换为int,再参与运算。
3)对比一下C语言
三、赋值运算,自动转换规则
将小范围类型变量转换成大范围类型的变量。Java会自动扩宽类型
看上面那张图,各个基本数据类型的取值范围都有了,如果一个取值范围包括了另一个的,那么赋值时,小的可以自动转换成大的
例子: long d = 333; float e = d; //可以
short a = 1; char b = a; //不行,因为取值范围不是包含,而是交叉
int a = 1; byte b = a; //不行,大的转成小的,要强制类型转换,byte b = (byte) a;
四、一些值得注意的地方
当运算符为取正运算符(+)。取负运算符(-)或按位取反运算符(~)时,如果操作数为byte、char或short,则先被转换为int,再参与运算