常常碰到的面試題: java有哪些數據類型,String是否是基本數據類型,他們有什麼區別?java
相信有不少同窗都能背出八大基本類型以及他們的區別,可是JVM是怎麼對它們進行內存分配的呢?
面試
java的數據類型分爲兩類:基本類型和引用類型數組
基本類型:byte short,int,long,float,double,char,booleanspa
引用類型:類,接口,數組對象
String 不是基本類型,他是一個特殊的類,下面會講到他的特殊地方。blog
基本類型,存放在棧中,存放的都是值,好比int a=3;這裏變量a裏存放的就是值,沒有a存放的是引用這一說了,也沒有字面值這一說。千萬別被迷惑。
接口
引用類型,對於一個類對象的引用,好比Person p=new Person(); 其中p存放在棧中,new Person();存放在堆中,這毫無異議。若是Person有基本類型,好比有屬性 int age;那麼age也跟隨new Person();存放在堆中,千萬別理解爲 age存放在棧中,並非全部的基本類型都存放在棧中,要根據上下文考慮。內存
對於String str="abc"; 它實際上是先從常量池中尋找值爲abc的字符串。若是找到就把引用地址返回給str。不然就會在常量池建立abc,沒有從堆中尋找abc的說法。這也是一個陷阱把。字符串
詳細參考下面文章,回答的很是精彩:it
http://zangxt.iteye.com/blog/440330#comments