簡體   English   中英

'==' 和 '=' 有什么區別?

[英]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無法轉換為booleanx=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.

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