数据类型转换

 

目录

一、什么时候数据类型会发生自动转换现象?

二、什么时候发生强转现象?

三、  下面代码存在编译问题为什么

四、  java中基本数据类型参与运算的规则



 

Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换

 

一、什么时候数据类型会发生自动转换现象?

     这里有2个不同数据类型的变量 A  和  B, 他们两个要参数数学运算,那么小类型会自动提升为大类型

    (自动转换 :将取值范围小的类型 自动提升为 取值范围大的类)

     转换规则:范围小的类型向范围大的类型提升, byte 、short、char 运算时直接提升为 int 

 

二、什么时候发生强转现象?

     当等号左边取值范围小,等号右边取值范围大的时候,需要进行强转才能进行数学运算

     eg:  int i = 1.5;   

              这是 错误,会产生编译失败,1.5是double类型,double取值范围 > int ;  

             想要赋值成功,只有通过强制类型转换,将 double 类型强制转换成 int 类型才能赋值。int i = (int)1.5;

     强转引发的问题

            浮点转成整数,直接取消小数点,可能造成数据损失精度。   

            int 强制转成 short 砍掉2个字节,可能造成数据丢失。

            

public static void main(String[] args) {
        // 定义s为short范围内最大值
        short s = 32767;
        // 运算后,强制转换,砍掉2个字节后会出现不确定的结果
        s = (short) (s + 10);
        System.out.println(s); // -32759
}

三、  下面代码存在编译问题为什么

public static void main(String[] args) { 
     byte b1 = 1, b2 = 2, b3, b6, b8; 
     final byte b4 = 4, b5 = 6, b7;
       b3 = b1 + b2; 
       b6 = b4 + b5; 
       b8 = b1 + b4; 
       b7 = b2 + b5; 
       System.out.println(b3 + b6);
 }

分析:

1、b3 = b1 + b2;   

     b1 和b2都是byte类型 且没有被final修饰,所以在参与运算的过程中都会转换成int类型的变量,而b3是byte类型,

   所以会编译出错,正确的写法是b3 =(byte) (b1 + b2)

2、b6 = b4 + b5;    b4,b5虽然都是byte类型,但是他们被final修饰了,所以参与运算时不会改变数据类型,

     因此b4+b5=b6是可以通过编译,也可以进行计算的

 

3、b8 = b1 + b4; 

     b1为btye类型没有被final修饰,b4为btye类型被final修饰,他们在参与运算时转为int类型,而b8是byte类型

    所以会编译出错,正确的写法是 b8 = (byte)(b1 + b4); 

 

 

4、b7 = b2 + b5; 同上,

 

5、System.out.println(b3 + b6); 结果为13

 

四、  java中基本数据类型参与运算的规则

        1、如果两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型

        2、如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型

        3、如果两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型

        4、否则(操作数为:byte、short、int 、char),两个数都会被转换成int类型,并且结果也是int类型。

 

被final修饰的基本数据类型在参与运算时,不会做类型改变

        final是java中的一个关键字,可以用来修饰类,方法,成员变量和本地变量,如果用final修饰引用,那么这个引用将不能被改变.

        使用final修饰变量,则这个变量只是可读不可写的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值