[英]Comparing an int initialization with a boolean operator for an if statement parameter
我已經聲明了 ints skyB和day ,並寫下了這一行:
if (skyB == true || (day=1) != true) {
System.out.print("example text");
}
我是否正確地假設代碼將在給定這些參數的情況下正確執行參數? 我特別不確定 (day="1") 是否會被正確檢測為錯誤,因為對象輸入確實是錯誤的。
最小可重現示例(不包括主要方法或包):
int skyB = false;
int day =2;
if (skyB == true || (day =1) != true) {
System.out.print("example text"); }
簡單的答案:這不是 C++
您不能為 boolean 字段分配數值。 在 Java 中,只有兩個有效值是true
和false
。 因此,您不能將 integer 值分配給 boolean 變量。
為了使您的 boolean 表達式有效,您的變量skyB
和day
必須是boolean
數據類型
boolean skyB = false
boolean day = true
if (!skyB || day) {
System.out.print("example text");
}
無需將boolean
字段與 true 或 false 進行比較即可對其進行評估。 表達式!skyB
(讀作“不是 skyB”)的計算結果為false
。 所以這相當於skyB == false
。 由於該部分的計算結果為真(skyB 等於假),表達式的第二部分將被跳過並調用System.out.print()
。 如果skyB
的值更改為 true,則將評估變量day
,如果該變量的值等於 true(它是),則將執行 if 語句。
或者,您可以使用數值構建 boolean 個表達式。 如何? 簡單的。 任何數學表達式的計算都是一樣的。 例如:
int x = 5;
int y = 3;
if (x > y) {
System.out.println("x is greater than y");
}
基本上......你試圖做的事情的邏輯(我理解它的方式)是正確的,但你的實施不是。 您不能混合使用 boolean 字段和數值。 Java 根本不允許。
現在,對於你的問題...
boolean skyB = false; // this must be boolean, not int
int day =2; // this is fine
if (skyB || day == 1) {
System.out.print("example text");
}
應該產生預期的結果。 用簡單的英語,上面的內容是:
如果 skyB 為假或為第一天,則打印“示例測試”
如果表達式的任何一部分未能計算為真(即如果 skyB 為真並且 day 變量是除 1 以外的任何值),它將不會打印任何內容。
更新:
即使這個答案已被接受和投票,我還是想包含一些有關 boolean 表達式的信息,以幫助可能在這個概念上苦苦掙扎的新開發人員。
什么是 Boolean 表達式?
根據Oracle 文檔,“ Boolean 表達式是邏輯語句,要么為 TRUE 要么為 FALSE。 ”這些表達式采用幾個不同的 forms。例如,
if (true) {...}
雖然這樣的 if 語句沒有真正的原因,但上面是一個有效的表達式。 “如果為真,則執行花括號內的操作。” 這意味着里面的東西會一直執行(讓它和沒有“如果”一樣)。但是,這是理解rest的基礎。
boolean isBlue = false;
if (isBlue) {...}
在上面的例子中,Boolean 表達式就是變量本身。 期望是,如果變量值的計算結果為true
,則將執行花括號內的內容。 由於該值為 false,因此不會執行。 上面的“如果”是更容易接受的縮寫形式
boolean isBlue = false;
if (isBlue == true) {...}
因此,由於此評估的左側(變量)值為 false 而右側為 true,因此完整表達式的評估結果為 false。 因此,花括號內的內容不會被執行(false 不等於 true)。 然而
boolean isBlue = false;
if(!isBlue == true){...}
否定 boolean 變量會切換它的值。 在這種情況下, isBlue
變量的值為false
。 “not”運算符將其值切換為true
。 由於true == true
計算結果為 true(true 等於 true 是一個 true 表達式),因此執行大括號內的內容。
public boolean isSkyBlue() {
return true; // sorry for the over simplification
}
...
if (isSkyBlue()) {...}
這只不過是我已經展示的內容的高級形式。 在這種情況下,該方法“計算”要返回的 boolean 值。 由於 boolean 值是自身的表達式,因此在括號內插入方法調用(如上圖所示)是有效的。 只要 function 返回true
,花括號內的內容就會執行。
我已經包含了以下示例:
int x = 5;
int y = 3;
if (x > y) {
System.out.println("x is greater than y");
}
任何類型的比較操作都會產生 true 或 false。 因此,這些比較操作是boolean個表達式。 這也包括覆蓋Object#equals(Object)
方法的結果。 例如:
String s = "Hello";
if (s.equals("Hello")) {...}
作為旁注,應該使用覆蓋的equals()
方法比較 Java 中的對象,而不是使用雙等號運算符(除非您只對比較 object 引用(地址)是否相等感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.