Re: [問題] 對java的一些疑問...

看板java作者 (突然覺得自己是孤獨的...)時間16年前 (2010/03/01 01:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/12 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : ※ 引述《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++ 形式寫出來) 中間恕刪 : 諸如此類。當然 Java 沒得讓你 自訂 operator overload, : 上面的這堆東西也只是概念上存在而已。 OK... 一些概念大至澄清了, 但又有新的疑問 再重複一次, 看看觀念是否有誤會到 1. int / double 會 casting成Int / Double的物件, 然後 int varA = 5; double varB = 1.0; Object o1 = varA; Object o2 = varB; 這樣是OK的? 2. Java並非全是物件/類別, 也分成 primitive 和 reference type 那 varA.ToString()是...? 我該稱ToString()為"方法"? 3. Java既然不支援operator overloading, 那String + int / String + String怎麼去實做出來的? (還是語言就是這樣?) ---> 看別人的回文, 說明String就是Java裡的一個特殊型別... (對嗎?) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.63.235 ※ 編輯: WPC001 來自: 123.195.63.235 (03/01 01:43)
文章代碼(AID): #1BYgc5P3 (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 8 之 12 篇):
文章代碼(AID): #1BYgc5P3 (java)