刷到一個題腦子一下子沒有反應過來記錄一下子學習 如下:

答案就是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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/228031.html
標籤:Java
上一篇:Mybatis原始碼閱讀(二)
下一篇:Mybatis原始碼閱讀(二)
