[學習筆記]Java中的boolean和C中的bool

今天在看《ThinkInJava》學習的時候,看到Java中boolean類型無法參與和其它類型的運算時,我產生了這些疑惑:
1.Java的boolean和C的bool是否相同?
2.Java的boolean存儲方式是什麼?佔用空間多少?
3.爲什麼Java的boolean無法和其它數據類型如int作運算?

搜了很多資料,感覺這個網站基本解決了我的所有困惑:
https://www.geeksforgeeks.org/comparison-boolean-data-type-c-java/
我憑藉我現在的理解,依次來回答這些問題吧。
1.不同。C中的bool以單字節整形的形式進行存儲,可以用%d的形式輸出。而且C中的bool可以參與與其它類型元素的運算。
2.存儲方式都是0或者1,佔用空間取決於虛擬機。比較主流的答案是4字節(32比特來存一個只需要1比特就足夠的信息,真是奢侈)。
3.因爲Java的編譯器鎖定了boolean類型和其它類型不一樣,在輸出是boolean的輸出結果是true/false,和C的0/1不一樣。所以可以認爲,不允許做運算(運算會報錯)是Java編譯器乾的好事。

順帶一提,我還有新發現。在C中對bool類型進行賦值的時候會出現自動轉換。非0的值會被自動轉化成1,只有0值纔會對應false。
如:

bool a = -7.3;
printf("%d,%d,%d",a, a == -7.3,a == true);

在C語言中並沒有編譯錯誤,輸出結果是1,0,1

感謝大家的支持和點贊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章