假設我創建了一個大小為 1 的物件 (Animal) 陣列,但后來我呼叫了一個回傳大小為 5 的物件陣列的函式。會發生什么,動物現在將變成一個包含 5 個物件的陣列,否則它會給我某種錯誤?
Animal[] animals = new Animal[1];
animals[0] = new Animal();
animals = createAnimals();
uj5u.com熱心網友回復:
Java改變陣列物件的大小
不。這根本不是你在這里做的。
Animal[] animals = new Animal[1];
這做了 3 件不相關的事情:
Animal[] animals;
new Animal[1];
animals = whatever the previous thing returned.
這將生成一個名為 的變數
animals。變數就像有標題的便利貼,您可以在上面寫下地址。這構成了一個大小為 1 的新陣列。陣列就像房子。他們沒有名字,但他們有一些地址。
這會將您剛剛建造的房屋地址寫在您的便利貼上。
當你運行animals = createAnimals()時,createAnimals()回傳一個地址。不是房子 - 房子的地址。你不能用java還房子;這是不可能的。所有變數都是參考或原語(這是一些數字型別的硬編碼串列,沒有什么復雜的,都是固定大小的概念)。animals = createAnimals()只需擦掉你的 postit(用鉛筆寫的),然后在上面寫上那個地址。
所以,如果代碼createAnimals看起來像:
Animals[] newArr = new Animals[5];
return newArr;
然后該方法建造了一個全新的(更大的)房子并回傳了它的地址,而不是你的 postit 導致另一個房子。原來的房子還在。原來的房子現在并且永遠是 1,因為 java 陣列不能調整大小。但是陣列參考(帶有地址的帖子)可以被清除,并且可以在其上寫入新地址。
那么,房子?它們不會神奇地改變大小。但是在em上有鉛筆標記的postits?你可以在今天運行這個概念:“從 postit 上讀取地址,上車,開車,測量你在那個地址找到的房子”,明天你可能會得到不同的結果:那是因為有人在上面寫了一個不同的地址postit,不是因為有人在仙境屋里發明了魔法愛麗絲。
如果你想在 java 中創建一個新物件,某個地方的某個人需要呼叫new 來創建一個。在這里,讓我們看看它的實際效果:
Animal[] a = new Animal[1];
a[0] = new Dog();
Animal[] b = a;
a[0] = new Cat();
System.out.println(a[0].makeNoise());
那將列印miauw。那是因為只有一所房子(只有一個陣列)和兩個 postit,每個都有相同的地址。我們只是按照我們的b = a;指示復制了地址,我們沒有蓋新房子。
uj5u.com熱心網友回復:
它會起作用。陣列變數不指定陣列有多大。所以你絕對可以重新分配animals給 createAnimals 方法的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363990.html
