public static void main(String[] args) {
final int a =15;
byte b = a;
System.out.println(a);
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我从int转换为byte时,它没有给出编译时错误,但是当我的转换从long转换为int时,它给出了编译时错误,为什么?
public static void main(String[] args) {
final long a =15;
int b = a;
System.out.println(a);
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)
chr*_*ke- 11
此外,如果表达式的类型是恒定表达
byte,short,char,或int:
- 如果变量的类型是
byte,,short或者char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示.
当您声明并初始化时final a,这是一个编译时常量表达式,编译器可以确定该值15将安全地适合于byte.JLS根本不允许在long没有解释的情况下隐式缩小转换,并且此规则至少回溯到Java 2(我可以在任何地方找到的最早的JLS).
我推测这个基本原理可能源于这样一个事实:Java字节码是针对32位字大小定义的,并且a long上的操作在逻辑上更复杂和昂贵.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |