1)Java程序運行時,對象是怎么進行安排放置的,內存是怎么分配?Eckel在Thinking in java中對五個不同的存儲數據的地方進行了簡要的介紹:
a. 寄存器。最快的存儲區(位于處理器內部),在Java里面,你不能直接控制,也不能在程序中感覺到寄存器的存在,可能是出于安全原因的考慮吧(C和C++允許編譯器建議寄存器的分配方式);
b. 堆棧。位于通用RAM,隨即訪問存儲器中,但通過堆棧指針可以從處理器那里獲得直接支持。由于僅通過指針的上下移動即可控制內存,所以速度上僅次與寄存器 。然而Java系統需要知道存儲在堆棧的所有項的生命周期,所以靈活性不高。因此一般只存儲對象的引用,而不直接存儲對象(基本類型一般也存放在這里的)
c. 堆。通用的內存池,也位于RAM。一般存放所有對象。堆是不用知道存儲的數據的存活時間的,當需要一個對象的時候,通過new即可在堆里進行存儲分配,這多少導致在清理堆的數據的不靈活性(基本類型的包裝器類存儲在堆中,也就是它是靠引用而“存活”的)
d. 常量存儲。常量值通常直接存放在程序代碼內部。在必要的情況下,可以選擇將其放在ROM中(字符串池正是這樣的一個例子)
e. 非RAM存儲。放在非RAM存儲中目的主要是為了讓數據存活在程序之外,其中兩個基本的例子是流對象和持久化對象
2)在Java中,所有數值類型都有正負號,所以不要尋找無符號的數值類型;
3)boolean類型所占存儲空間的大小沒有明確指定,僅定義為能夠取字面值true或false;
4)JavaSE5 自動包裝功能將自動將基本類型轉換為包裝器類型:
Character ch = 'x';
并可以方向轉換, char c = ch;
5)Java不允許重復定義相同名字的基本類型(C/C++可以)


{
int x = 12;

{
int x = 1; // Illegal
}
}

6)基本類型的作用域和對象的作用域都受限于花括號“{}”,一旦超出它們所在的花括號,那它們就消失了。但基本類型的消失是指在堆棧中的內存被收回,而對象的消失只是在堆棧中的存放對象引用的內存被收回,但其對象(堆中的)還存活,除非立刻通過垃圾回收機制回收了。這樣的設計有利于字符串池的實現
7)若類的某個成員是基本數據類型,即使沒有進行初始化,也會獲得一個默認值。然而對于“局部”變量,即并非某個類的字段,比如在某個方法在定義的,如果沒有進行初始化,Java系統在編譯的時候會報錯的。