java基本数据类型自动转换规则

一、java基本数据类型

Java提供了八种基本类型,其中包括六种数字类型(四个整数型,两个浮点型),一种字符类型和一种布尔型。 
整型: short, int, long, byte; 
浮点型:float, double; 
字符型:char; 
布尔型:boolean. 
Java中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或操作系统的改变而改变。

java基本数据类型自动转换规则_第1张图片


二、非赋值运算,自动转换规则

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基本数据类型自动转换规则_第2张图片


三、赋值运算,自动转换规则

将小范围类型变量转换成大范围类型的变量。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,再参与运算



你可能感兴趣的:(java复习,基本数据类型,自动转换规则,java)