来自==运算符的“无效赋值”错误

时间:2010-04-29 18:19:24

标签: java compiler-errors

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

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; }

4 个答案:

答案 0 :(得分:9)

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

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是否为null,则需要使用==运算符

if (i == null)

答案 1 :(得分:4)

我认为你不会混淆任务和平等比较。我认为你的编译器只是给你一个令人困惑的错误信息。这个计划:

Integer i = 4;
i ==null; 

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

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

您的第一个程序应该正确编译。也许文本中有一些看不见的unicode字符会让编译器感到困惑。尝试删除整个功能并再次输入。

答案 2 :(得分:4)

我想我看到了你的问题。对不起,其他答案没有解决。

因此,Java有一些其他语言共享的想法,因为某些东西是有效的表达式并不意味着该东西本身就是一个有效的语句< / em>的

例如,此代码会同样抱怨:

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

答案 3 :(得分:1)

在PL / SQL中,使用:=运算符为变量赋值。使用=比较两个值。

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

你可以这样做:

x = i==null;

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