簡體   English   中英

來自==運算符的“無效賦值”錯誤

[英]“Invalid assignment” error from == operator

我試圖寫一個簡單的方法:

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

==不是賦值運算符,它是一個布爾等於運算符,請參閱:

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)

我不認為你混淆任務和平等比較。 我認為你的編譯器只是給你一個令人困惑的錯誤信息。 這個程序:

Integer i = 4;
i ==null; 

應該給出這樣的錯誤:

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

你的第一個程序應該正確編譯。 也許文本中有一些看不見的unicode字符會讓編譯器感到困惑。 嘗試刪除整個功能並再次輸入。

我想我看到了你的問題。 對不起,其他答案沒有解決。

因此,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

在PL / SQL中,使用:=運算符為變量賦值。 =比較兩個值。

在Java中,使用=運算符為變量賦值。 在某些情況下,使用==.equals()方法比較兩個值。

你可以做這樣的事情:

x = i==null;

這將測試i是否為null ,如果是,則將值true分配給x (假設x是布爾值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM