public class Demo
{
public static void main(String[] args)
{
int a=10,b=20;
short c = (a<b)?a:b;
System.out.println(c);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的程序,我得到以下错误,为什么我没有得到
"Demo.java:6: error: incompatible types: possible lossy conversion from int to short
short c = (a<b)?a:b;
1 error"
Run Code Online (Sandbox Code Playgroud)
我用变量声明写"final",它工作正常.但为什么会这样呢?
public class Demo
{
public static void main(String[] args)
{
final int a=10,b=20;
short c = (a<b)?a:b;
System.out.println(c);
}
}
Run Code Online (Sandbox Code Playgroud)
这是在 Java 语言规范\xc2\xa75.2 赋值上下文中指定的:
\n\n\n赋值上下文允许使用以下之一:
\n...
\n另外,如果表达式是 byte、short、char 或 int 类型的常量表达式 (\xc2\xa715.28):
\n\n
\n- 如果变量的类型是
\nbyte、short、 或char,并且常量表达式的值可以用变量的类型表示,则可以使用缩小基元转换。
在第二个代码片段中使用的带有三元运算符的表达式是常量表达式,因为该表达式中使用的所有变量都是final。此外,10可以表示为short. 因此,允许从int到 的缩小原始转换。short
这是有道理的,不是吗?编译器知道最终变量的所有值,因此这肯定是允许的。
\n然而,在第一种情况下,a和b不是常量变量,因此(a<b)?a:b也不是常量表达式,因此需要显式转换:
short c = (short)((a<b)?a:b);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |