基本数据类型之间的运算规则:自动类型提升和强制类型转换
/*
基本数据类型之间的运算规则:
前提:这里讨论的只是7种基本数据类型间的运算,不包含boolean类型的。
1.自动类型提升:
结论:当容量小的数据类型变量与容量大的数据类型变量做运算时,结果自动提升为容量大的类型
byte、char、short-->int-->long-->float-->double
特别的:当byte、char、short三中类型的变量做运算时。结果为int类型。方式内存溢出。
2.强制类型转换:
说明:此时的容量大小指的是,表示数的范围的大和小,并不是所占字节大小。比如:float容量大于long的容量
*/
class VariableTest2
{
public static void main(String [] args)
{
byte b1 = 2;
int i1 = 12;
//编译不通过
//byte b2 = b1+i1;
int i2 = b1+i1;
long l1 = b1+i1;
System.out.println(i2);
float f = b1+i1;
System.out.println(f); //虽然是浮点型,但是输出后会自动添加小数点。
short s1 = 123;
double d1 = s1;
System.out.println(d1);//输出123.0
//***************特别的********************
char c1 = 'a'; //a=97
int i3 = 10;
int i4 = c1+i3;
System.out.println(i4);
short s2 = 10;
//char s3 = c1+s2;//编译不通过,char存不下
byte b2 = 10;
//char c3 = c1+b2;//编译不通过
//short s3 = b2 + s2;//编译不通过
//short s4 = b1 + b2; //编译不通过
//*******************************
}
}
下面是强制类型转换
/*
强制类型转换:自动提升运算的逆运算
1.需要使用强转符:()
2.注意点:强制类型转换,可能导致精度损失。
*/
class VariableTest3
{
public static void main(String [] args)
{
double d1 = 12.3;
//精度损失举例1
int i1 = (int)d1;//输出结果为12,截断操作
System.out.println(i1);
//无精度损失
long l1 = 123;
short s2 = (short)l1;
System.out.println(s2);
//精度损失举例2
int i2 = 128;
byte b = (byte)i2;
System.out.println(b);//-128
}
}
特殊情况
class VariableTest4
{
public static void main(String [] args)
{
//1.编码的情况
long l = 123123; //结尾因为没有l,所以自动降级,为int型
System.out.println(l);
//编译失败:过大的整数
//long l1 = 234635456156456;
long l1 = 132123132564l;
//*************
//编译失败,没加F
//float f1 = 12.3;
//2.编码情况2:
//整形常量,默认类型为int型,
//浮点型常量,默认类型为double型
byte b = 12;
//byte b1 = b+1; //编译失败
//float f1 = b+12.3;//编译失败
}
}