Java是基於C++的,但Java是一種更加純粹的面向對象程序設計語言。
C++和Java都是混合/雜合型語言。雜合型語言允許多種編程風格。
每種編程語言都有自己操縱內存中元素的方式。
在Java中,一切都被視為對象。操縱的標識符實際上是對象的一個引用。
//創建的只是引用而不是對象
String s1;
//創建一個引用的同時便進行初始化
//Java語言的特性:字符串可以用帶引號的文本初始化
String s2 = "abcd";
//更通用的初始化方法
//創建一個引用,並與一個新的對象相關聯
String s3 = new String("abcd");
程序運行時,對象的放置安排,內存的分配都是我們必須了解的。
有五個不同的地方可以存儲數據:
1.寄存器
2.堆棧
3.堆
4.常量存儲
5.非RAM存儲
寄存器:位於數量極其有限的寄存器,是最快的存儲區,寄存器會根據需求進行分配,不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象
堆棧:位於通用RAM(隨機訪問存儲器)中,通過堆棧指針可以從處理器那裡獲得直接支持,堆棧指針向下移動,則分配新的內存,向上移動,則釋放那些內存(這是一種快速有效的分配存儲方法,僅次於寄存器)創建程序時,Java系統必須知道存儲在堆棧內所有項的確切生命周期,以便上下移動堆棧指針。--->限制了程序的靈活性,所以某些Java數據(如對象引用)存儲在堆棧中,但是Java對象並不存儲在堆棧中
堆:通用的內存池(位於RAM區)。用於存儲所有java對象。編譯器不需要知道存儲的數據在堆中存活多長時間(靈活性,但分配和清理的時間較長)。
常量存儲:存放在程序代碼內部。
非RAM存儲:數據完全存活於程序之外,不受程序的任何控制,在程序沒有運行時也可以存在。如流對象,持久化對象。
new一個對象存儲在堆裡,因此用new創建一個對象——特別是小的,簡單的變量往往不是很有效的。
對於這些類型,Java采取不用new來創建變量,而是創建一個並非是引用的自動變量(直接存儲值,並且存儲在堆棧中)。
Java語言對於每種基本類型所占存儲空間大小是固定的,不像其他語言隨機器硬件架構的變化而變化。(可移植性更高)
/**
* 基本類型創建的不是引用,而是一個自動變量,直接存儲值,並且存儲在堆棧中。
* 基本類型都有相對應的包裝器類,能在堆中創建一個非基本對象,用來表示相對應的基本類型。
*/
//基本類型
int i = 5;
//包裝類型
Integer integer = new Integer(i);
//Java SE5自動包裝
Integer integer1 = 4;
//反向轉換
int i1 = integer1;