java中既然沒有運算子多載,那麼它的代替實現是什麼。。。
我來幫他解答
滿意回答
2011-04-22 13:43
其實是有的,就是字串操作裡的+和+=。但是不能自訂運算子多載,所以只有這個是重載的。它的代替實現實際上就是方法(函數)。比如BigDecimal類,可以用來表示很長的十進位數,這樣的數相加並不用重載的+號而直接有一個叫做add(BigDecimal)的成員函數來實現。
4|評論(1)
求助知友
timeslot | 當前分類:12 級 排名:2770
擅長JAVA相關:12 級 排名:2770
提問者對回答的評價:
謝謝指教。
按預設排序|按時間排序
其他回答 共2條
檢舉|2011-04-22 13:04loveOuyoko|當前分類:21 級排名:44
每個語言有每個語言的特性,運算子多載不是java支援的特性,也沒有規定必須有替代實現。
就像java至今不支援閉包一樣,運算子多載也沒有代替實現。
對物件導向的語言來說,運算子本身就不夠“物件導向”,一切都可以用方法來實現
基本態度
對於c++來說,一開始便是從c開始的,最初稱為帶類的c,與c的相容性在很多設計決策中起了很多作用。在類型設計中,表現在類型保持了相容c的,雖然有了class,但依然保留了struct,決定性的原因就是相容性。而java最初設計的時候,就是以一門物件導向語言來設計的,從c,c++,smalltalk裡學習,但並沒有保持向上相容性,以一門新的語言的姿態出現。最終對class的處理上,c++盡量保持了與基本類型的相容性,讓class表現的就像一個基本類型。一個class定義就與基本類型一樣,是一組資料實體,同時引入了運算子重裝機制,使得class更可以像一個基本類型那樣+-*/...。java對於class則採用了另一個方向,與基本類型區別鮮明,也沒有運算子多載。為對象引入了一個新的間接層,每個class的對象就是一個引用。這樣的設計一方面把記憶體的管理交給了記憶體回收行程,另一方面使得容器實現時,可以將所有的對象一致對待,間接層的引入提高了抽象層次,同時帶來了間接引起的訪問開銷。