这是我的示例
代码
class Example{
public static void main(String args[]){
short s = 100;
byte b = s; // this is compile time error because of no casting
byte z = (short)25.12; // why this happens
System.out.println(z);
System.out.println(((Object)z).getClass());
}
}
请原谅我,因为我刚刚开始学习java。 你能从技术上告诉我这个问题吗?
最佳答案
- 您的此行
byte b = s;
会出错,因为您无法将较大的数据类型 short(2 bytes) 分配给较小的数据类型 byte( 1 字节)。这就是为什么它会给你编译时错误。 - 现在来到这一行
byte z = (short)25.12;
,让我们对其进行分解。25.2
默认情况下是 double,但是当您使用 (short) 对其进行类型转换时,它会变成25
,这是一个 >整体文字。现在编译器将检查 25 是否可以存储在字节中。由于5
介于 -128 和 127 之间,即字节范围,因此不会给出任何编译时错误。但如果你给出的任何值超出了字节范围,就会出错。例如:byte z = (short)128.12;
关于java - 为什么当内联转换并赋值时它会编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901397/