3.27Java强制类型转换(cast)

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!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14587229.html