【问题标题】:"Invalid assignment" error from == operator== 运算符的“无效分配”错误
【发布时间】:2010-04-29 18:19:24
【问题描述】:

我试图写一个简单的方法:

boolean validate(MyObject o)
{
  // propertyA && propertyB are not primitive types.
  return o.getPropertyA() == null && o.getPropertyB() == null;
}

== null 部分出现了一个奇怪的错误:

令牌 == 上的语法错误。无效的 赋值运算符。

也许我的 Java 在使用 PLSQL 一个赛季后已经生锈了。所以我尝试了一个更简单的例子:

Integer i = 4;
i == null;
// compile error: Syntax error on token ==. Invalid assignment operator.

Integer i2 = 4;
if (i == null); //No problem

这怎么可能?

我正在使用 jdk160_05。

澄清一下:我不想分配任何东西,只是在两个布尔值之间进行&& 操作。我不想这样做:

if (o.propertyA() == null && o.propertyB() == null) { return true; }
else { return false; }

【问题讨论】:

  • 来吧! Downvoter 是否愿意发表评论?
  • 我没有给你投反对票,但我猜他们认为这是一个如此愚蠢和明显的问题,看起来你在拖钓。
  • 之前的问题不够充分,能够据此给出答案
  • 只要 PropertyA 和 PropertyB 都是对象而不是原始数据类型,您的 validate 方法应该没有任何问题。
  • @Tom 我会尝试一个干净的构建。您可能会遇到幻像错误

标签: java compiler-errors


【解决方案1】:

== 不是赋值运算符,它是布尔相等运算符,请参阅:

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.21.2

如果要将 i 设置为 null,请使用简单的赋值运算符 =:

i = null;

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.1

如果要检查 i 是否为空,则需要使用 == 运算符

if (i == null)

【讨论】:

  • 你能解释一下你当时想要做什么......你的问题有点令人困惑......
  • 所以我不能做类似return i==null 的事情吗?难以置信。
  • 是的,你可以写“return i==null;”但这不是您提交给我们考虑的内容。
  • return i==null 将工作。你上面的代码只有i==nulli==null 本身并没有任何意义。
  • @ryanprayogo。仍然,编译器错误?应该只是编译成无操作或其他东西。
【解决方案2】:

我认为您不会混淆赋值和相等比较。我认为你的编译器只是给你一个令人困惑的错误信息。这个程序:

Integer i = 4;
i ==null; 

应该给出类似这样的错误:

Program.java:8: not a statement
                 i ==null;

您的第一个程序应该可以正确编译。也许文本中有一些不可见的 unicode 字符使编译器感到困惑。尝试删除整个函数并重新输入。

【讨论】:

  • 感谢您考虑并没有给出you cant assign 糟糕的答案。
  • ?那你有没有解决你的问题?
  • @Pyrolistical。它比所有其他答案都更有帮助。
  • 我认为汤姆的问题在我的回答中得到了更完整的回答,但您的问题至少也指向了正确的方向。问题是 i==null 不是一个语句,但是一些 java 编译器对“不是一个语句”的情况给出了糟糕的诊断。
  • @Tom 如果有帮助,问题是什么?
【解决方案3】:

我想我看到了你的问题。很抱歉,其他答案没有解决。

所以,Java 有这个想法,其他一些语言也有这个想法,仅仅因为某些东西是有效的表达式,并不意味着该东西本身就是有效的语句。

例如,这段代码会出现类似的报错:

Integer i = 4;
i+3;    // this line gives a compilation error

但显然我可以在其他地方使用i+3(去拆箱!)来表示“7”:

System.out.println(i+3); // this is fine

这有点令人困惑,因为与某些具有这种表达式/语句区别的语言不同,java 允许您使用任何方法调用(无论它是否返回值)作为语句。但是,大多数 java 运算符本身并不能形成有效的语句。

同样,编译失败:

Integer i = 4;
i;    // this line gives a compilation error

有关完整的血腥细节,请参阅http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32588

【讨论】:

  • 感谢您考虑一下。
【解决方案4】:

在 PL/SQL 中,为变量赋值是通过 := 运算符完成的。使用= 比较两个值。

在 Java 中,为变量赋值是使用 = 运算符完成的。比较两个值是使用==.equals() 方法在某些情况下完成的。

你可以这样做:

x = i==null;

这将测试i 是否为null,如果是,则值true 将分配给x(假设x 是布尔值)。

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多