簡體   English   中英

在循環內創建的Java String數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM