类型转换

package java基础;

public class Demo05 {//类型转换
//java是一种强类型语言,所以在进行某些运算时需要用到类型转换。

/*
* 低----------------------------------------->高
* byte-->short-->cher-->int-->long-->float-->double
*/

//运算中不同类型的语句要先转换为同一类型,再进行运算。

//转换分为强制类型转换(高-->低)(类型)变量名;
//自动类型转换(低-->高)
public static void main(String[] args) {
int i =128;
byte b = (byte)i;
System.out.println(i);//正常输出128
System.out.println(b);//数据溢出:输出为-128,因为byte的范围是-127--127,128超出了这个范围,所以它会变。

//强制转换的格式为 (类型)变量名 列:byte b = (byte)i;


double c =i;//高转低为自动转换,可以直接写
System.out.println(c);//输出128.0


/*
注意点:
*1.不能对布尔值进行转换。
*2.不能把对象类型转换为不相干的类型。
*3.把高容量转换到低容量时,强制转换。
*4.转换的时候可能存在内存溢出或者精度问题。
*/

//精度问题
float a1=19.5f;
double a2 = 59.9;
int a3 =(int)a2;
int a4 = (int)a1;
System.out.println(a4);//输出19
System.out.println(a3);//输出59
//浮点数转整数它会直接舍弃掉小数位。


char a5 = 'a';
int a6 = a5+1;
System.out.println(a6);//输出98,因为a的Unicode编码为97
System.out.println((char)a6);//输出b,同理


//常见问题
//操作比较大的数的时候,注意溢出问题
int money = 10_0000_0000;
int year = 20;
System.out.println(money*year);//输出-1474836480,因为 计算时数据溢出了。
long tota1 = money*year;//这里的money和year是int类型的
System.out.println(tota1);//输出-1474836480,因为money和year默认是int,
//根据我们写的代码,它们计算完才会转换为long类型,但它在转换前数据就已经运算并溢出了,
//所以结果为-1474836480

//正确的解决方法为
long tota2 = money*((long)year);//在运算前把year的数据类型转化为long类型,就会以long类型进行运算。
System.out.println(tota2);//输出20亿
}
}

posted @ 2022-04-10 15:06  教诲  阅读(51)  评论(0)    收藏  举报