一種是基本類型(PRimitive types), 共有8 種,即 int , short , long , byte , float , double , boolean , char (注意,并沒有string的基本類型)。這種類型的定義是通過諸如 int a = 3 ; long b = 255L;的形式來定義的,稱為自動變量。值得注意的是,自動變量存的是字面值,不是類的實例,即不是類的引用,這里并沒有類的存在。如 int a = 3 ; 這里的a是一個指向 int 類型的引用,指向 3 這個字面值。這些字面值的數(shù)據(jù),由于大小可知,生存期可知(這些字面值固定定義在某個程序塊里面,程序塊退出后,字段值就消失了),出于追求速度的原因,就存在于棧中。
另外,棧有一個很重要的特殊性,就是存在棧中的數(shù)據(jù)可以共享。假設我們同時定義:
int a = 3 ; int b = 3 ;
編譯器先處理int a = 3 ;首先它會在棧中創(chuàng)建一個變量為a的引用,然后查找有沒有字面值為 3 的地址,沒找到,就開辟一個存放 3 這個字面值的地址,然后將a指向 3 的地址。接著處理 int b = 3 ;在創(chuàng)建完b的引用變量后,由于在棧中已經有 3 這個字面值,便將b直接指向 3 的地址。這樣,就出現(xiàn)了a與b同時均指向 3 的情況。