[英]Initialization of a boolean with a Boolean.FALSE/.TRUE - why?
[英]Why boolean in Java takes only true or false? Why not 1 or 0 also?
有什么理由為什么 Java 布爾值只取true
或false
為什么不取1
或0
呢?
與 C 和 C++ 等語言不同,Java 將boolean
視為一種完全獨立的數據類型,它具有兩個不同的值:true 和 false。 值 1 和 0 的類型為 int 並且不能隱式轉換為boolean
。
因為布爾值有兩個值: true
或false
。 請注意,這些不是字符串,而是實際的布爾文字。
1 和 0 是整數,沒有理由通過將它們設置為“替代真”和“替代假”(或者對於那些習慣於 Unix 退出代碼的人來說相反?)來混淆事物。 在 Java 中使用強類型應該只有兩個原始布爾值。
編輯:請注意,如果需要,您可以輕松編寫轉換函數:
public static boolean intToBool(int input)
{
if (input < 0 || input > 1)
{
throw new IllegalArgumentException("input must be 0 or 1");
}
// Note we designate 1 as true and 0 as false though some may disagree
return input == 1;
}
雖然我不會推薦這個。 請注意,您無法保證int
變量確實是 0 或 1; 並且沒有 100% 明顯的語義是什么意思是真的。 另一方面, boolean
變量總是true
或false
,很明顯哪個是真。 :-)
因此,不要使用轉換函數,而是習慣於對所有表示真/假概念的事物使用boolean
變量。 如果您必須使用某種原始文本字符串(例如用於存儲在平面文件中),“true”和“false”的含義要清楚得多,並且可以通過庫方法Boolean.valueOf立即轉換為布爾值。
因為創建 Java 的人希望 boolean 明確表示真或假,而不是 1 或 0。
關於如何將 1 和 0 轉換為布爾值,語言之間沒有達成共識。 C 使用任何非零值表示真,使用 0 表示假,但某些 UNIX shell 則相反。 使用 int 會削弱類型檢查,因為編譯器無法防止傳入的 int 值不應該在布爾上下文中使用的情況。
其他答案沒有指出的一件事是,不將整數視為真值的一個優點是它避免了這種 C/C++ 錯誤綜合症:
int i = 0;
if (i = 1) {
print("the sky is falling!\n");
}
在 C/C++ 中,錯誤地使用=
而不是==
會導致條件意外評估為“true”並將i
作為意外副作用更新。
在 Java 中,這是一個編譯錯誤,因為賦值i = 1
的值具有類型int
並且此時需要一個boolean
。 在 Java 中遇到麻煩的唯一情況是,如果您編寫這樣的蹩腳代碼:
boolean ok = false;
if (ok = true) { // bug and lame style
print("the sky is falling!\n");
}
......任何有一點“好品味”的人都會寫成......
boolean ok = false;
if (ok) {
print("the sky is falling!\n");
}
具體到這一點讓你遠離整個 TRUE 在 VB 中是 -1,而在其他語言中,true 只是非零。 將布爾字段保持為 true 或 false 會使 java 處於此參數之外。
to represent since JVM has a limited support for the boolean type.See Section 3.3.4 The boolean type .相關說明:java 編譯器使用來表示因為 JVM 對布爾類型的支持有限。請參閱第 3.3.4 節布爾類型。
, and any non-zero integer represents (Source : Inside Java Virtual Machine by Bill Venners)在 JVM 中,整數零表示 ,任何非零整數表示 (來源:Bill Venners 的Inside Java Virtual Machine )
即使在 C++ 中有一個 bool(布爾的縮寫)數據類型。 但在 C++ 中,任何非零值都是真值,包括負數。 0(零)被視為false 。 在 JAVA 中, true和false有一個單獨的數據類型布爾值。
在 C 和 C++ 中,沒有名為boolean
數據類型。 這就是為什么它使用 1 和 0 作為true
值和false
值的替代。
在 Java 中,1 和 0 是int
(整數)類型,因此會產生錯誤。 Java 也有自己的布爾值( true
和false
),以及它們自己的布爾數據類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.