类型转换
知识点
- 上一节讲到,字符的本质还是数,所以字符也可以进行运算
- 运算中,先要将不同类型的数据转换为同一类型后,才能再进行运算,转换具有优先级
低———————————————————>>高 (所占的空间大小决定优先级)
byte, short, char—>int—>long—>float—>double (浮点数优先级在整数以上,因为 float 4 < long 8)
强制转换 高——>低 : (类名)变量名
自动转换 低——>高 : 啥都不用干
自动转换 低——>高 : 啥都不用干
代码
public class test05 {
public static void main(String []args){
//强制转换 高——>低 : (类名)变量名
int i=128;
byte b=(byte)i; //强制转换, 此时 内存溢出(byte -128~127) ,要避免这种情况
System.out.println(b);
System.out.println((int)23.15); //23,存在精度丢失的问题
System.out.println((int)-23.15f); //-23,存在精度丢失的问题
//自动转换 低——>高 : 啥都不用干
double d=i; //自动转换,啥也不用干
System.out.println(d);
/*
注意点
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 把高容量转换为低容量时,强制转换,反之则自动转换
4. 转换时可能存在 内存溢出 或者 精度丢失 问题 ,要避免这种情况
*/
System.out.println("================================");
char a='a'; //97,字符的本质是数
int num=a+1; //自动类型转换,char->int 是低到高
System.out.println(num); //98
System.out.println((char)num); //b 强制类型转换,int->char 是高到低
//操作数值较大的数时,要注意溢出问题
//JDK7 新特性 ,数字间可以用下划线_分开且不会造成影响,更方便读写数值
int money=10_0000_0000; //一年赚的钱 10亿
int years=20; //赚了20年
int total1=money*years; //总共赚的钱
long total2=money*years;
System.out.println(total1); //-1474836480,此时会出现错误,溢出了
System.out.println(total2); //-1474836480,也会错误,默认是int,转换前就有问题了,因为先计算再转换
long total3=money*(long )years;
//先将一个数转化为long,(int)money*(long )years过程中,int money也会自动转化为long
System.out.println(total3); //20_0000_0000,正确
}
}
标签:类型转换,java,05,int,System,long,println,转换,out
From: https://www.cnblogs.com/zhanjianhai/p/17050927.html