【问题标题】:Strange Compilation Error Involving Casting涉及强制转换的奇怪编译错误
【发布时间】:2015-04-22 15:42:42
【问题描述】:

在我的 IDE 中工作时,我注意到一些相当奇怪的事情。

double x1 = 0, x2 = 0;
int a = (int) x1 = (int) x2;

所以这是无效的语法,这不足为奇。但是,why 的解释让我感到困惑,这是无效的语法。当我将此代码放入 Eclipse Luna 并将鼠标悬停在第二行时,会出现一条消息:

类型不匹配:无法从 boolean 转换为 int

1 个快速修复可用:

将“a”的类型更改为“布尔”

如果我忽略错误并继续运行,即使 Throwable 堆栈跟踪也会显示相同的消息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
        Type mismatch: cannot convert from boolean to int
        Syntax error on token "=", <= expected

我不明白为什么编译器会认为(int) x1 = (int) x2 是某种比较,其计算结果为truefalse。有谁知道为什么会这样?

【问题讨论】:

  • 好吧,这需要一些时间来由 javac 执行,并且错误是不同的:unexpected type, required: variable found: value
  • 我可以看到它的来源。您认为这是 Eclipse 特有的错误吗?
  • 是的。在处理奇怪的编译器异常错误时,先尝试用javac编译代码,它会提供一个better编译错误信息。
  • @TNT IntelliJ 给出了“预期变量”错误((int) x1 带有红色下划线)。
  • @LuiggiMendoza 谢谢。下次我会记住这一点。

标签: java compiler-errors


【解决方案1】:

强制转换运算符的优先级高于赋值运算符。因此,您不能将转换值分配给x1,因为编译器实际上将其解释为:

...
cast x1 to integer
assign (int) x2 to the value of (int) x1
...

第 2 步不起作用,因为 (int) x1 不是 lvalue(请注意使用 c++ 中的术语,我不知道 java 中是否存在同义词)。

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2011-01-22
    • 2016-01-23
    • 2010-10-07
    相关资源
    最近更新 更多