簡體   English   中英

為什么 Java 中的布爾值只接受 true 或 false? 為什么不是 1 或 0 呢?

[英]Why boolean in Java takes only true or false? Why not 1 or 0 also?

有什么理由為什么 Java 布爾值只取truefalse為什么不取10呢?

與 C 和 C++ 等語言不同,Java 將boolean視為一種完全獨立的數據類型,它具有兩個不同的值:true 和 false。 值 1 和 0 的類型為 int 並且不能隱式轉換為boolean

因為布爾值有兩個值: truefalse 請注意,這些不是字符串,而是實際的布爾文字。

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變量總是truefalse ,很明顯哪個是真。 :-)

因此,不要使用轉換函數,而是習慣於對所有表示真/假概念的事物使用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 中, truefalse有一個單獨的數據類型布爾值。

在 C 和 C++ 中,沒有名為boolean數據類型。 這就是為什么它使用 1 和 0 作為true值和false值的替代。

在 Java 中,1 和 0 是int (整數)類型,因此會產生錯誤。 Java 也有自己的布爾值( truefalse ),以及它們自己的布爾數據類型。

暫無
暫無

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

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