在java中,為什麼if 裡面可以放入乙個Boolean類,而放入其他的類就通不過編譯呢?

時間 2021-05-30 00:09:48

1樓:只喝伊利

因為if()語句就是用來做判斷用的,產生的結果只有true和false這兩種結果。

你第乙個例子裡面寫了布林型別的,而且給了結果是false在判斷的是時候檢查了布林型別是是否是true和false的問題,所以能通過

而你的第二個例子是是string型別,賦值又是空而且你怎麼能讓if()自動去判斷string自身是否是true和false,你加個==""或是!=""這樣才符合語句規範啊

2樓:朝風

總結一下:

1編譯器只認boolean

2Boolean型別會被自動拆箱成boolean型別第一條約束使得if (String)等語句不會通過編譯第二條使得if (Boolean)可以通過編譯

3樓:danny

"類"這種東西是有語意的,具體是什麼類,要在鏈結階段,甚至有的要在執行時才能確定,但是對ifcondition的判斷在編譯階段就完成了。建議去看看編譯原理,深入了解一下編譯和鏈結的區別

4樓:lukewen

其實對於編譯器來說 if 和其他方法差不多的,可以理解為編譯器定義好的方法,if()內的就相當於其他方法傳入的引數,只是這裡被限定了只能傳Boolean型別的物件,Boolean又是final的,你又沒法重寫if函式當然是這樣了。

5樓:馮東

我看 @無聊的1957 的答案,忽然聯想到剛來美國的生活。

那時候拿到賬單,總會有些莫名其妙的收費。後來我就不管了。過了些時候,另乙個同事也搬到美國,也遇到同樣的事情。

她還挺喜歡和我聊。而且她是乙個什麼東西都要搞明白的人。於是每次我都問她找客服的結果是什麼。

當然結果都是人家講出一堆理由,而且這錢你下次做同樣的事情也避不掉。最後她也說「找了半天客服耽誤時間,和不找還沒什麼區別,有那功夫還不如休息看書。」

當然了,賬單上有不明白的專案,和這個問題是完全不同的。

但是,compiler 告訴你錯了,還去找語言規範,這是對的。

為什麼java中要做IntegerCache這種設定?

Night Silent 所以 Integer 之類的包裝類都實現了 Comparable 介面啊,使用 compareTo 比較 Integer 就妥妥的 如果不按照設計意圖,而使用 比較,那就是坑了。Compares two objects numerically.param anotherIn...

為什麼java中要分public protected 和 private?

你要知道,人類的智商是不足以支撐一蹴而就的。因此世間的大部分事物都是一步一步曲折發展的,這是本因。這個本因推動了管理學的發展,管理學再提出許可權控制的思想,想到這一層,我想你也就沒什麼疑問了。 迷茫的小學生 這個就是物件導向的封裝。由於現在開發,都是MVC架構,Model層寫上實體,寫上privat...

為什麼java中宣告多用Map,List而不是具體實現型別?

比如介面的返回值,外部需要key,value 型別的資料結構,那就返回Map。至於你在實現的時候,如果沒有特殊需求,就用HashMap,高效讀寫 如果你需要排序,就來個TreeMap。但是對呼叫的人來說都是get key 或者用迭代器。 舉例List list new ArrayList 當我發現對...