[英]What is the difference between '==' and '='?
我知道其中一個是按位的,另一個是合乎邏輯的,但我無法弄清楚:
Scanner sc = new Scanner(System.in);
System.out.println("Enter ur integer");
int x=sc.nextInt();
if(x=0)//Error...it can not be converted from int to boolean
System.out.println("...");
該錯誤表示x
無法轉換為boolean
或x=0
的結果無法轉換為boolean
。
== 檢查是否相等。 = 是賦值。
您正在做的是: if( x = Blah )
- 在 Java 中,此語句是非法的,因為您無法測試賦值語句的 state。 具體來說,Java 不會將賦值視為 boolean 操作,這在 if 語句中是必需的。 這與 C/C++ 形成對比,C/C++ 確實允許您將賦值視為 boolean 操作,並且可能是許多令人毛骨悚然的錯誤的結果。
當你寫 'x = 0' 時,你是在說“將 0 存儲在變量 x 中”。 整個表達式的返回值為“0”(就像這樣,所以你可以說一些愚蠢的事情,比如 x = y = 0)。
當你寫 'x == 0' 時,它會說“Does x equal 0?”。 此表達式的返回值將是“真”或“假”。
在 Java 中,您不能只說 if(0),因為 if 需要一個真/假答案。 所以放 if(x = 0) 是不正確的,但是 if(x == 0) 沒問題。
== 是比較運算符,= 是賦值。
== is an equality check. if (x == 0) // if x equals 0
= is an assignment. x = 0; // the value of x is now 0
我知道這個問題已經得到解答,但這仍然時常出現,不是程序員錯誤而是印刷錯誤(即,程序員知道他的意思,但失敗了)。 很難看出,因為兩者看起來很相似。
我發現一種幫助避免這樣做的方法是將常量表達式放在左側,如下所示:
if (0 == x)
...
這樣一來,如果我不小心只使用了一個“=”符號,編譯器將失敗,並出現有關向常量表達式賦值的錯誤,無論賦值運算符是否為左結合以及 if 條件是否需要強類型 Boolean。
if(x=0)
在這里,您將值 0 賦給變量 x。 Java 中的 if 語句無法像在許多其他語言中那樣計算 integer 參數。 在Java,如果需要一個boolean。試試
if(x == 0)
做一個比較。
解釋錯誤的意思
“表達方式
x=0
無法轉換為 Boolean。”
只是為了澄清 C/C++ - 賦值被評估為正確的操作數
if(a = n)
計算為 n,所以 (n = 1) 為真 (n = 0) 為假
一個有趣的注意事項:由於賦值運算符的計算結果為正確的操作數,因此以下內容在 Java 中是有效的(盡管不漂亮):
if (( x = blah ) > 0) ...
由於運算符優先級('>' 綁定強於 '='),因此需要括號。
正如其他人已經說過的,'='是賦值; '==' 是比較。
在您的程序更改中
如果(x=0)
到
如果(x==0)
"==" checks for equality
"=" Is used for assignment.
它給你錯誤,因為你在 if() 中為 x 賦值,你應該在其中檢查是否相等。 嘗試將其更改為相等而不是賦值運算符。
正如其他人所說, =
分配而==
比較。
但是,這些陳述也有其自身的價值。
=
運算符返回其右側操作數的值。 這就是像a = b = c = 5
這樣的語句是如何工作的:它們被解析為a = (b = (c = 5))
,其計算結果為a = (b = 5)
然后a = 5
。
==
運算符返回boolean
如果其操作數相等則為true
。 if
語句在其參數為true
時運行其主體。 因此, if
if (5 == 5)
之類的 if 標頭轉換為if (true)
。 這就是為什么有時您會看到 header while (true)
的無限while
循環; while
循環運行“while”腳趾參數為真。
如果您的if
語句中有boolean
,如果分配的值(或“比較”)為true
,它不會給出錯誤並運行代碼。 這就是為什么永遠不要混淆=
和==
運算符如此重要的原因,尤其是在使用boolean
時。
希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.