3.27Java强制类型转换(cast)
举例
将一个double类型的值转为int类型:
实例:
double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(nx);
System.out.println(d);
System.out.println((char)d);
/*
强转移可能会出现数据丢失
*/
在数据类型转换的时候会出现的问题
操作比较大的数的时候要留意是否溢出
结果比表述的范围要大就发生了溢出
不要命名名字为‘l'小写L的变量,'l'容易和1混淆。Long类型的使用也是要用大写L
实例:
/**
* 测试类型转换常见的问题
* @author Lucifer
*/
public class TestTypeConvertError {
public static void main(String[] args) {
int money = 100000000; //10亿
int years = 20;
//返回的total是负数,超过了int的范围
int total = money*years; //先算出后面的表达式的值,其结果超过了int的范围,再将这个结果赋给total超过了int的范围所以结果是负数
System.out.println("total=" + total);
//返回的total仍然是负数,默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失
long total1 = money*years;
/*
虽然total1声明了是long类型,但是在计算的时候是以int类型去进行计算的,而且本身在int类型计算的时候值已经溢出
所以在赋值给long也无用
*/
System.out.println("total1=" + total1);
//返回的total2正确,先将一个因子变成long,整个表达式发生提升.全部用long来计算。
long total2 = money*((long)years);
System.out.println("total2=" + total2);
/*
正确的方法是先让表达式的结果为long
如total2,先让表达式中的一个操作数为long类型
这样计算出来的表达式的结果也为long
先把其中一个变量类型做提升,然后整个表达式的结果容量都会提升
*/
//命名问题
int l = 2; //分不清是L还是1
long a = 23451l;
System.out.println(l+1); //注意不要用小写L
long total3 = 34L*2323*a*l; //保险起见在运算时就先让一个操作数变为和变量一个类型
System.out.println(total3);
}
}
It's a lonely road!!!