Bar*_*ler 2 java primitive scjp
K.Sierra在她的书"SCJP学习指南"中提到"我们知道一个文字整数总是一个整数,但更重要的是,一个涉及任何大小或更小的表达式的结果总是一个整数."
我已经开始尝试了,我对以下结果有点困惑:
byte a = 1; // correct
byte b = 1 + a; // incorrect (needs explicit casting)
byte c = 1 + 1; // correct (I expected it to be incorrect)
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释为什么最后一个例子不需要投射?为什么Java编译器会进行隐式转换?是因为有2个文字吗?澄清非常感谢.
隐式类型转换仅在您的值RHS已知时才有效compile-time,意味着它们compile-time constants.在其他情况下,您需要进行显式类型转换.
所以: -
byte c = 1 + 1; // Value of `1 + 1` is known at compile time. Implicit cast
byte c = 1 + a; // Value of `1 + a` is evaluated at runtime. Explicit cast needed
Run Code Online (Sandbox Code Playgroud)
另外,请注意,如果将变量声明a为final byte a = 1,则第二个赋值将编译,因为在这种情况下,您a将是一个编译时常量.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |