[英]Java String array created inside loop
我對以下代碼的區別有疑問:
Vector v = new Vector();
String [] str_arr = new String[3];
for(int i=0; i<3; i++)
{
str_arr[0] = "A";
str_arr[1] = "B";
str_arr[2] = "C";
v.add(str_arr);
}
System.out.println(v.size()); //answer 3
與
Vector v = new Vector();
for(int i=0; i<3; i++)
{
String [] str_arr = new String[3];
str_arr[0] = "A";
str_arr[1] = "B";
str_arr[2] = "C";
v.add(str_arr);
}
System.out.println(v.size()); //answer 3
這兩個代碼之間的唯一區別是,第二個代碼是在循環內部創建字符串數組。
兩種代碼產生相同的結果,但是我想知道兩者之間的區別是什么。
這兩個代碼片段不會產生相同的結果。 第一個片段將相同的數組對象添加到Vector 3次。 第二個片段向Vector添加了三個不同的數組對象。
結果似乎是相同的,因為第二個片段中的所有三個數組都包含相同的值。
如果您要從
str_arr[0] = "A";
str_arr[1] = "B";
str_arr[2] = "C";
至
str_arr[0] = "A" + i;
str_arr[1] = "B" + i;
str_arr[2] = "C" + i;
您會在第一個代碼段中看到,Vector中的所有數組都包含[A2,B2,C2]
,因為只有一個數組會被覆蓋。
另一方面,第二個代碼段將產生一個Vector,其中包含三個不同的數組- [A0,B0,C0]
, [A1,B1,C1]
, [A2,B2,C2]
。
在第二個版本中, String[]
在每次迭代結束時超出范圍。 這意味着您無法在其他地方訪問它。 循環后,變量不再存在。 您也不要在迭代之間保留值。
編輯 :數組本身仍然存在,因為向量對其有很強的引用。
但是,您的代碼中存在一些冗余問題。
for(int i=0; i<3; i++)
{
str_arr[0] = "A"; //all
str_arr[1] = "B"; //of this
str_arr[2] = "C"; //is redundant
v.add(str_arr);
}
在這里(第一個版本),即使變量從一個迭代到另一個迭代仍然存在,您仍會在每次迭代中為數組分配相同的值,因此您不需要主體的大部分內容
盡管輸出將相同,但是在兩個程序的最后一行中,您的應用程序的狀態將有所不同。
首先,您的堆只有一個String數組,而第二個則只有三個。
第一個代碼段比第二個代碼段快一點(不占用內存和進程),因為它只實現一次數組並在每個循環中更新其值,但是在第二個代碼段中,它實現了新數組並在每個循環中為其注冊一個地址
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.