Java的隐式转换与强制转换

        由于我也是初学者,所以有错误请一定要指正。

        隐式转换是什么?转换应该都能理解,那隐式是什么意思?

        我看过的视频教程告诉我的是:

  1. 当两个数据的数据类型不一样的时候,必须进行转换,再进行运算
  2. 当取值范围小的数据类型的数据,去和一个取值范围大的进行运算,那么,取值范围小的会自动被转换成大的,然后再进行运算
  3. 当byte,short,char三种类型的数据运算的时候,他们都会自动的被转换成int,然后在进行运算

        那么,隐式转换其中的“隐式”,我的理解是:系统自动帮你转换,就叫隐式转换

取值范围顺序(从小到大)

byte < short < int < long < float < double

        根据以上几点,我们可以有:

public class Test{
    public static void main(String[] args){
        int a = 1;
        double b = 1.1;
        double c = a + b;
        // a + b的时候,a先被转换为double类型,再和b进行相加,最终结果赋值到c,所以c也必须是double类型,否则会报错
    }
}
public class Test{
    public static void main(String[] args){
        byte a = 20;
        byte b = 30;
        int c = a + b;
        // byte被自动转换成int类型,所以c也必须是int类型,不然会报错
    }
}
public class Test{
    public static void main(String[] args){
        int a = 1;
        long b = 1000L;
        double c = 10000;
        double result = i + n + d;
        // 取值范围小的变取值范围大的,从左到右依次进行,所以result必须是double
    }
}

        强制转换又是什么?强制是什么意思?

        如果把一个取值范围大的值赋值给取值范围小的变量,直接赋值是不行的,必须加入手动强制转换

代码格式:

        目标数据类型 变量名 = (目标数据类型)被转换的数据

        比如,我们可以有:

public class Test{
    public static void main(String[] args){
        double a = 2.33;
        int b = (int)a
    }
}

         但是,我们不能有:

public class Test{
    public static void main(String[] args){
        int a = 1024;
        byte b = (byte)a;
        // 当被转换的值超过了目标数据类型的取值范围,却还依然进行强制转换,则会发生溢出,不会得到期望的正确结果
    }
}

        另外,受到隐式转换的影响,会出现一种比较反直觉的强制转换。

        比如,两个byte类型的值进行相加,结果必然是int类型的,这时候,我们如果想要把他变成byte类型的结果,必须要进行强制转换:

public class Test{
    public static void main(String[] args){
        byte a = 1;
        byte b = 1;
        byte result = (byte)(a + b);
    }
}
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值