做同樣壹件事情,為什麽采用兩種風格迥異的風格呢?況且,Java中的數組其實是完備(full- fledged)的對象,直接暴露成員變量,可能不是壹種很OO的風格。那麽,設計Java的那幫天才為什麽這麽做呢? 記得vamcily 曾問我:“為什麽獲取數組的長度用.length(成員變量的形式),而獲取String的長度用.length()(成員方法的形式)?”
我當時壹聽,覺得問得很有道理。做同樣壹件事情,為什麽采用兩種風格迥異的風格呢?況且,Java中的數組其實是完備(full- fledged)的對象,直接暴露成員變量,可能不是壹種很OO的風格。那麽,設計Java的那幫天才為什麽這麽做呢?
帶著這個疑問,我查閱了壹些資料,主要是關於“JVM是如何處理數組”的。
數組對象的類是什麽?
既然數組都是對象,那麽數組的類究竟是什麽呢?當然不是java.util.Arrays啦!我們以int壹維數組為例,看看究竟。
public class Main {
public static void main(String args[]){
int a[] = new int[10]; Class clazz = a.getClass();
System.out.println(clazz.getName());
}
}
在SUN JDK 1.6上運行上述代碼,輸出為:
[I
看起來數組的類很奇怪,非但不屬於任何包,而且名稱還不是合法的標識符(identifier)。具體的命名規則[1]可以參見 java.lang.Class.getName()的javadoc。簡單的說,數組的類名由若幹個'['和數組元素類型的內部名稱組成,'['的數目 代表了數組的維度。
具有相同類型元素和相同維度的數組,屬於同壹個類。如果兩個數組的元素類型相同,但維度不同,那麽它們也屬於不同的類。如果兩個數組的元素類型 和維度均相同,但長度不同,那麽它們還是屬於同壹個類。
Tags:
Post comment:
◎welcome to give out your point。