初窥Java门径(下)

本文深入探讨了Java中的类型转换,包括int与long、double的相互赋值,int与boolean之间的限制,以及int字面量常量给byte赋值的规则。同时,解析了数值提升的概念,如int与long混合运算时的类型提升,以及byte与byte运算导致的编译错误。此外,还介绍了int与String之间的相互转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、理解类型转换

Java作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。

1.int 和long/double相互赋值

long数据范围为-2

public class TestDemo2 {
    public static void main(String[] args) {
        int a = 10;
        long b = 20;
        double c = 1.0;
        a = b;//编译出错
        b = a;//编译通过
        a = c;//编译出错
        c = a;//编译通过
    }
}

long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.

2.int和boolean相互赋值

public class TestDemo2 {
    public static void main(String[] args) {
        int a = 10;
        boolean b = true;
        b = a;//编译出错,不兼容
        a = b;//编译出错,不兼容
    }
}

int 和 boolean 是毫不相干的两种类型, 不能相互赋值.

3.int字面值常量给byte赋值

public class TestDemo2 {
    public static void main(String[] args)
        byte a = 100;//编译通过
        byte b = 256;//编译出错
    }
}

byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内。

二、理解数值提升

1.int与long混合运算

public class TestDemo2 {
    public static void main(String[] args) {
        int a = 10 ;
        long b = 20;
        int c = a + b;//编译出错
        long d = a + b;//编译通过
    }
}

当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来
接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

2.byte与byte的运算


public class TestDemo2 {
    public static void main(String[] args) {
        byte a = 20;
        byte b = 21;
        byte c = a + b;
        System.out.println(c);
    }
}
Error:(5, 20) java: 不兼容的类型:int转换到byte可能会有损失

byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.

byte c = (byte)(a + b);
41

三、int与String之间的相互转换

1.int转成String

public class TestDemo2 {
    public static void main(String[] args) {
        int num = 10;
        //方法一
        String str1 = num +"";
        //方法二
        String str2 = String.valueOf(num);//将十进制转换为数字字符串
    }
}

2.String转成int

public class TestDemo2 {
    public static void main(String[] args) {
        String str = "100";
        int num = Integer.parseInt(str);//将数字字符串转换为十进制数
    }
}

四、总结

不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型。如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失。将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.不同类型的数据混合运算, 范围小的会提升成范围大的。对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.隐式类型转换和类型提升往往是编程时最容易忽视的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心事付流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值