對於局部變量,如果是基本類型,會把值直接存儲在棧;如果是引用類型,比如String s = new String("william");會把其對象存儲在堆,而把這個對象的引用(指針)存儲在棧。
再如
String
s1 = new String(“william”);
String s2 =
s1;
s1和s2同為這個字符串對象的實例,但是對象只有一個,存儲在堆,而這兩個引用存儲在棧中。
類的成員變量在不同對象中各不相同,都有自己的存儲空間(成員變量在堆中的對象中),基本類型和引用類型的成員變量都在這個對象的空間中,作為一個整體存儲在堆。而類的方法卻是
該類的所有對象共享的,只有一套,對象使用方法的時候方法才被壓入棧,方法不使用則不占用內存。