/**
整数类型的运算及自动转换
**/
class Demo2{
public static void main(String[] args){
byte a = 100;
// byte b = a+1; 这个是错误 的,因为byte进行运算时,会升级为int类型,int类型无法自动转换为byte类型
int b = a+1;
System.out.println(b);
short c = 100;
// short d = c + 1; 这个也是错误的,short进行运算时,也会自动升级为int类型,而int类型不能自动转换为short类型
int d = c + 1;
System.out.println(d);
char e = 100;
// char g = e + 10;这个也是错误 的,char 类型参与运算也会自动 提升为int类型。char之所以能进行整型运算,是因为其acscii对应的值 为数字。
int f = e + d; //char 类型参与运算也会自动 提升为int类型,所以下面的这句是正确的
System.out.println(e);
//int h = 2000000000000; 是错误 的,因为赋值 超过了int所能容纳的最大值
int h = 2000000000;
h = h+1000000000;
//最后得出的值为负数,因为溢出了。
System.out.println(h);
// long g= 2147483647 +1; 此得出的结果是-2147483648,因为在运算时以int类型运算的,运算结果溢出了,成了负数,所以会得出一个负数
long g= 2147483647 +1L;
//因为1L是long类型,int类型与long进行运算,会得出long类型,所以是我们预想的值 :2147483648
System.out.println(g);
/*
注意: 所有的类型都有最大值,一旦运算时超过了最大值,就会损失精度,可能会变成负数值。
在定义变量赋值时,不可超过指定类型值的最大值 与最小值,因为超过了就不在是此种类型的值了,就变成其它类型的值了
byte short char 进行运算时都 会自动转换为int类型。
如果使用常量进行运算,只要结果的值 不超出定义变量的最大值或最小值,就不会报错
还要注意:在运算时超出了int的最大值 ,也不会升级long或float/double
任何 的整数类型与long进行运算,都会得到long类型的值
*/
byte a1 = 8+10;
System.out.println("这个是正确的,因为是常量相加,也没有超过此类型的最大值或最小值:"+a1);
short a2 = 100 + 2000;
System.out.println("这个也是正确的:"+ a2);
char a3 = 44+21;
System.out.println("这个也是正确的:"+a3);
}
}
JAVA整数类型的自动转换
最新推荐文章于 2021-02-08 11:20:01 发布