数据类型_强制转换问题
int---->byte
public class HelloWorld{
public static void main(String[] args){
int num1 = 100L; //long-->int,编译报错
byte num2 = 20; //int-->byte,无错
/*
数据类型所能表示的数据范围同样是从大-->小,为什么byte num2 = 20;编译没错呢?
从大-->小必须强制类型转换,那么
int num1 = (int)100L;
byte num2 = (byte)20; //为什么(byte)加不加都行呢?
*/
System.out.println(num1);
System.out.println(num2);
}
}
在后面的陆续学习中,解决了以上问题,见下文
编译器的优化
对于byte/short/char这三种类型来说,如果右侧赋值的数值没有超过左侧数据类型范围,那么javac编译器会自动隐含地补上一个(byte)(short)(char)。
//20默认是int类型,byte数据范围在-128~127,显然没有超过!
byte num2 = 20; //写法没有问题,编译通过的
那么编译器会走动隐含地补上一个(byte),因此编译没有出错。

本文深入探讨Java中数据类型自动转换的原理,特别是当byte、short和char类型的变量被赋值时,编译器如何自动进行隐式类型转换,确保代码在不超出类型范围的情况下顺利编译。

490

被折叠的 条评论
为什么被折叠?



