Re: [問題] 對java的一些疑問...
※ 引述《WPC001 (突然覺得自己是孤獨的...)》之銘言:
: 最近因為要接手弄一些java的東西, 所以開始看了java語言的前幾章
這些都是討論蠻多次的東西了,
: 1. Java所有內建的型別都是物件?
: (包含int / double / string / array 以及自訂的class產生的物件)
: --> a. 如果不是, 那每個內建型別卻可以用Object類別表示, 十分不合理
: 而且也都固定支援ToString或是一些"方法", 這是物件才有的行為
: 所以個人認為
: b. 如果是, 那繼續看問題2
"不是"
在 Java 5.0 以前,int, double, byte, char, ...等,
都是不能 assign 給 Object 的,
必須要自己建立 Wrap type,例如: Integer, Double, Byte ...
而從 5.0 開始,多了 auto-boxing 和 auto-unboxing,
自動幫你在 wrap type 和 primitive type 間轉換,
所以 "看起來" 好像可以把 int assign 給 Object reference。
: 2. java是call by value, 但書上說, 針對類別產生的物件, 是call by address
: 這讓我覺得這個語言缺乏一致性...
: 針對內建的型別(類別), 是call by value (copy), 而自訂的類別是call by address
: 當然這可以是"特例", 但就覺得缺乏美感... XD
: 3. java不支援operator overloading, 但string的"+", 卻又很特殊...
: (相比C++, 其實我覺得有些不自然... XD)
: 4. java是否支援implicit casting? 為何System.out.println(3.0 - str1 + 3 + "5")
: 總是能優先轉成String?
呃...有沒有 implicit cast 書上總有寫吧
而且上面的例子也不能 compile,所以我就假設第一個 - 其實是 + 好了。
首先,String Concatenation 和 Additive 是兩個不同的運算子,
只是都用 + 這符號罷了,
然後,這兩個運算子有相同的 priority,
( http://www.uni-bonn.de/~manfear/javaoperators.php )
並且都是左結合率。
所以 str1+num1+num2: 兩次都是 string concatenation
而 num1+num2+str1: 第一次是 additive (並沒有像你說的,總是優先轉成 string)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.160.117
※ 編輯: tkcn 來自: 220.132.160.117 (02/28 23:49)
討論串 (同標題文章)