2010-04-29 44 views
4

我试图写一个简单的方法错误“无效的分配”从==操作符

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

也许我的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; } 
+1

来吧! Downvoter关心评论? – Tom 2010-04-29 18:20:36

+0

我没有投票给你,但我的猜测是他们认为这是一个愚蠢而显而易见的问题,它似乎就像你在拖。 – Pyrolistical 2010-04-29 18:23:17

+0

以前的问题是不够的,并能给出基于该 – gmhk 2010-04-29 18:24:34

回答

4

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

Integer i = 4; 
i ==null; 

应该给一个错误是这样的:

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

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

+3

感谢您对此进行了一些思考,而不是给出“你不能分配”蹩脚的答案。 – Tom 2010-04-29 18:33:47

+0

?你是否解决了你的问题? – Pyrolistical 2010-04-29 18:36:58

+0

@Pyrolistical。它帮助了所有其他答案。 – Tom 2010-04-29 18:39:50

9

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

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

如果要我设置为null使用简单赋值运算符=:

i = null; 

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

如果你想检查我是零,那么你需要使用==操作符

if (i == null) 
+0

我不想分配任何东西。请查看我更新的帖子。 – Tom 2010-04-29 18:23:07

+0

你可以请你解释你正在尝试做什么,然后......你的问题是有点混淆...... – Jon 2010-04-29 18:24:30

+0

所以我不能做'返回我== null'?难以置信。 – Tom 2010-04-29 18:25:08

1

在PL/SQL,赋值给一个变量与:=操作完成。使用=完成比较两个值。

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

你可以做这样的事情:

x = i==null; 

这是检验inull如果是这样,该值true将被分配到x(假设x是一个布尔值)。

4

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

所以,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

+0

谢谢你的一些想法。 – Tom 2010-04-29 18:41:52