刷到一個題腦子一下子沒有反應過來記錄一下子學習 如下: 答案就是A 這是為什麼呢 我乍一看nums1 new 了一個數組對象並把長度定為3,nums2聲明瞭一個數組,並定義了12345的值,如果 把nums2賦值給nums1它不是會越界嘛長度不一樣嘛,這是我乍一看的想法。 理解了好一會後發現這個題考 ...
刷到一個題腦子一下子沒有反應過來記錄一下子學習 如下:
答案就是A 這是為什麼呢 我乍一看nums1 new 了一個數組對象並把長度定為3,nums2聲明瞭一個數組,並定義了12345的值,如果
把nums2賦值給nums1它不是會越界嘛長度不一樣嘛,這是我乍一看的想法。
理解了好一會後發現這個題考查的是對象指向問題:
再深入理解一下的話就是對象的聲明和new了 聲明對象一般用於基本數據類型,基本數據類型不能用new來聲明,但是可以使用它們對應的封裝類來寫
public static void main(String[] args){ /*int []array = new int [4]; array[0]=10; array[1]=20; System.out.print(array[0]+":"+array[1]);*/ int[] nums1 = new int[0]; int nums2[]= {1, 2, 3, 4, 5}; nums1 = nums2; for (int x : nums1){ System.out.print(x + ":"); } for (int i = 0; i < nums2.length; i++) { System.out.println(nums2[i]); } }
new一個對象時,會在堆中開闢出一個記憶體空間,同時在棧中生成你創建的變數這個變數指向對應的記憶體空間,這相當於key和value的關係當堆中的空間沒有對象指向它時即為null時,它將會被系統回收。
而聲明對象是直接在棧中聲明。
所以題目的問題是指向,當nums2指向這個堆中的記憶體時,它的值就會變成nums2,因為nums1也指向這個堆記憶體,即nums1=nums2
個人學習,內容拙劣見諒QAQ