Re: [問題] 對java的一些疑問...
※ 引述《WPC001 (突然覺得自己是孤獨的...)》之銘言:
雖然有兩篇回文了,我也寫一點我覺得需要補充的 :)
: 最近因為要接手弄一些java的東西, 所以開始看了java語言的前幾章
: 1. Java所有內建的型別都是物件?
: (包含int / double / string / array 以及自訂的class產生的物件)
入門書都會提到,java 中的 variable 分兩種:
primitive type 和 reference type.
int/double 並不是物件。
: --> a. 如果不是, 那每個內建型別卻可以用Object類別表示, 十分不合理
: 而且也都固定支援ToString或是一些"方法", 這是物件才有的行為
: 所以個人認為
JDK5 開始, primitive type "好像" 可以用到一些 "方法",
全因 JDK5 引入的 auto-boxing/unboxing 功能。
: b. 如果是, 那繼續看問題2
: 2. java是call by value, 但書上說, 針對類別產生的物件, 是call by address
: 這讓我覺得這個語言缺乏一致性...
: 針對內建的型別(類別), 是call by value (copy), 而自訂的類別是call by address
: 當然這可以是"特例", 但就覺得缺乏美感... XD
通通都是 pass-by-value, 這個毋庸置疑。
: 3. java不支援operator overloading, 但string的"+", 卻又很特殊...
: (相比C++, 其實我覺得有些不自然... XD)
這個好像沒有人說清楚。
Java 不是不支援operator overloading, 只是
不支援 "自訂operator overloading".
String 的 + 和 += 就是暫時有的唯二 operator overloading
(記得好像說 JDK7 還會再加 BigDecimal/BigInteger 的
operator overloading?)
: 4. java是否支援implicit casting? 為何System.out.println(3.0 - str1 + 3 + "5")
: 總是能優先轉成String?
你懂 C++ 嗎?
這樣就好辦.
首先你這個應該不行,3.0 -str1 應該就掛了.
改回 3.0 + str + 3 + "5" 吧。
它能 "轉成" String 並不是 implicit casting.
你可以想成是因為有下面的 operator overloading 而已:
(C++ 形式寫出來)
String operator(String s, double d) {
return s + Double.toString(d);
}
String operator+(double d, String s) {
return Double.toString(d) + s;
}
String operator+(String s, int i) {
return s + Integer.toString(i);
}
String operator+(String s, Object o) {
return s + o.toString();
}
諸如此類。當然 Java 沒得讓你 自訂 operator overload,
上面的這堆東西也只是概念上存在而已。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.250.0.44
討論串 (同標題文章)