类型转换
-
由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
低——————————————————————————>高
byte,short,char —>int—>long—>float—>double(小数优先级大于整数)
强制类型转换
-
指类型由高转到低,其格式为:(低的类型)变量名
- 注意点
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换为低容量时,需要强制转换,格式为(类型)变量名
- 转换时可能出现内存溢出,或者精度问题!!后面有案例
自动类型转换
- 注意点
-
指类型由低转到高
public class DEMO04 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i;//byte 内存溢出-128-127
double d = i;
//强制转换 格式 (类型)变量名 高转到低
//自动转换 低转到高
System.out.println(i);
System.out.println(b);
System.out.println(d);
/*注意点
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换为低容量时,需要强制转换 ,格式为(类型)变量名
4.转换的时候可能出现内存溢出,或者精度问题!
*/
System.out.println((int)23.7);//23.7是小数,高于整数int,所以需要强转
System.out.println((int)-45.89);//分别输出23,-45,精度丢失!
//==========
System.out.println("=============");
char g ='a';
int f = g+1;//int高于char,低转高不需要强转
System.out.println(f);//输出98
System.out.println((char)f);//输出字符b//int高于char,高转低需要强转
}
}
- 输出结果对照
精度丢失问题
System.out.println((int)23.7);//23.7是小数,高于整数int,所以需要强转
System.out.println((int)-45.89);//分别输出23,-45,精度丢失!
内存溢出问题
- 注意默认int类输出,两个int值相乘,默认输出int类型。如何修改为long类输出?可以先对其中一个强制转换位long类型,如money*((long)years);此时整个表达式按long计算
public class DEMO05 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割,不会影响输出
int money = 100_000_0000;//输出1000000000
System.out.println(money);
int years = 20;//A处
int total = money*years;//B处
System.out.println(total);//输出值太大,计算时溢出,显示-1474836480
long total2 = money*years;//A*B
System.out.println(total2);//默认是int,转换之前以及存在问题
// 两个int值相乘(A*B),默认输出int类型,可以先对其中一个强制转换位long类型,如money*((long)years);
long total3 = money*((long)years);//这样就按整个表达式按long计算
System.out.println(total3);//成功输出20000000000
}
}
- 输出结果对照
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/271433.html