Q1:
int i 這個有無分配內存呢?
int *p 呢?
具體是在棧空間還是在堆空間里分配內存呢?
?
A1:
int i;
int *p;
這兩個都在棧辨別配了內存空間
但是p指向的地址為野地址,不可直接拿來使用
即p指向的空間沒有分配
?
Q2:在Java中定義數組時必須分配內存,這句話是錯的還是對的呢
?
A2:
Java中的數組你可以看到1個特殊的對象,聲明時是放在棧中的,分配的空間存儲在堆中
如:
1. int[] arr = null;
此時只是在棧中聲明了1個 arr 數組,但并未對其分配空間,所以它沒有指向
2. int[] arr = new int[6];
此時在棧中聲明了1個arr數組,并且在堆中開辟了1塊空間,此時 arr 已分配內存了
看具體的情況吧,定義數組應當是聲明吧,在需要的時候再開辟空間也能夠
?
Q3:
Java 中沒有初始化的局部變量分配了內存嗎?
聲明2個局部變量
int i;
int j = 0;
請問這兩種情況都在棧內分配了內存嗎?
如果是聲明3個援用變量,請問它們有甚么區分呢?
Object o;
Object b = null;
Object j = new Object();
第1種是否是只在棧內分配了內存,而沒有在堆內分配內存,或是堆和棧都沒有分配內存;
第2種只在棧內分配內存嗎?還是堆和棧都分配了內存,null占用內存嗎?占用的是堆還是棧內存?
?
A3:
先貼上代碼和編譯生成的指令再分析
public static void main(String[] args) {
String s;
int i;
}
―――-生成的指令―――生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
![]()