关于java中的类型转换

作为java中的基础,类型转换不学好,以后的开发中可能会出现各式各样的bug,到那时你想改bug有可能都找不到!

强制转换符:(转换的数据类型[int,short,byte,long]) 字面量/字面值
int y = (int)Number;// 强制转换成int类型

强制转换原理:

  • 原始数据的二进制字节码:
    00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
    8字节long类型

  • 强转后的数据:
    00000000 00000000 00000000 01100100
    4字节int类型

强转的的原理就是将数值左边的二进制砍掉

自动类型转换机制:
long x = 456;
小容量可以自动转换成大容量,‘456’ 被默认设为int类型,但是使用的是long类型声明变量进行赋值,所以会自动转换成long类型;
这种机制被称为:自动类型转换机制

关于基本数据类型之间的互相转化:转换规则:
    1、八种数据当中除布尔类型不可转换,剩下的7种类型之间都可以进行转换
    2、小容量向大容量转换,称为自动类型转换,容量从小到大排序:
        - byte < short < int < long < float < double
                 char <
       char和short可表示的种类数量相同,但是char可以取更大的正整数
    3、大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,
    程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。
    
    4、当整数字面值没有超出byte,short,char的取值范围,
    可以直接赋值给byte,short,char类型的变量。
    
    5、byte,short,char混合运算的时候,各自先转换成int类型再做运算。
    
    6、多种数据类型混合运算,先转换成容量最大的类型再做运算。 

样式例子:
1*

		double dd = 10/3;
        System.out.println(dd); // 输出3.0
  • 逻辑分析:在最开始,整数型已经被当做是int类型进行除法,所以得3;
    因为赋值的是double类型所以输出的结果是3.0;
    程序先运行10/3=3;int类型相除取整数!然后赋值给dd变量
    变量是double类型,所以结果是3.0

  • 该例中先理清执行的顺序,先进行的是10/3的整数计算,得出了3,然后才是将这个3赋值给dd

2*

        dd = 10.0 / 3;
        System.out.println(dd); // 输出3.3333333333333335
  • 逻辑分析:与上方例子不同右方赋值项的式子是 double类型 / int类型;
    所以在一开始运算结果的时候就3.333333333333,最后将dd重新设置为该值

  • 与上例一样先理清执行顺序,先进行运算。这里运算时double类型10.0 / int类型3得出结果是3.33333333333333333这个无限循环小数,然后才将这个小数赋值给dd变量

    3*

          long g = 10;
          byte b = (byte)(int)g/3; 
    
  • 编译出错!逻辑分析:
    先把g变量弄明白是什么类型了再与3这个int类型做运算公式
    最开始的g是long类型强制转换后成为了int类型再次转换后成为了byte类型
    long类型g > int类型g > byte类型g
    转换后的运算: byte类型g(10) / int类型3 = int类型3
    为什么报错?最后运算后的是int类型,而赋值的变量是byte类型,大容量转小容量,精度受损所以报错。

  • 在该例中,第一句代码并无报错,第二句代码先行完成的是类型转换将g变量强制转换成了byte变量 ,byte类型g / int类型3 得出 int类型3,出错的点在于变量的接收。一个byte类型的b变量,要接收int类型的字面值?问题出在这里,大容量的int类型字面值存进byte类型b变量中,先进行转换,由于未加强制类型转换符,所以大容量转小容量-精度受损

        解决方法1:
        int b = (byte)(int)g/3;
        System.out.println(b);//输出3
    
  • 接收的变量是int类型,int类型字面值赋值给int类型变量,没毛病

        解决方法2:
        byte b = (byte)(int)(g/3);
        System.out.println(b);//输出3
    
  • 在计算的时候先计算g/3得出结果3,然后转换为int类型,转换成byte类型,最后将byte类型字面值赋值给byte类型变量b

类型转换总结:
* 牢记上方6条类型转换规则!
* 在脑海中将编译和运行两个阶段分开,这是两个不同的阶段!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值