2017-01-24 290 views
0

我在編程方面很新穎。我對Java中的Strings有誤解。據我所知,在Java中的字符串不可變。這意味着它不能被改變,但是我已經看到很多按字符串讀取文件字符串的例子,並且currentString在每次迭代中都會改變。請幫我理解爲什麼這是可能的,並寫下來。從URL Java read large text file with separator從文件中讀取字符串(逐行)JAVA

BufferedReader br = null; 
try { 
    String sCurrentLine; 
    br = new BufferedReader(new FileReader("C:\\testing.txt"));//file name with path 
    while ((sCurrentLine = br.readLine()) != null) { 
      String[] strArr = sCurrentLine.split("\\+"); 
      for(String str:strArr){ 
       System.out.println(str); 
        } 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (br != null)br.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
+0

通過不可變,它們表示字符串本身的實例不能被更改。當您重新分配變量時,您將爲其分配不同的字符串實例,舊值不會更改。 – Rogue

回答

0

在代碼sCurrentLine 實施例不是一個對象,而是一個一個對象的引用。每次迭代該行時,都會引用一個新的對象,因此實際上sCurrentLine的值不會更改,但其引用會在每次迭代中更改爲新的對象,當然這些對象包含不同的值。

請參考this這篇文章解釋了字符串的不變性更好。

+0

非常感謝! – qmalt

0

在Java中,String對象是不可變的,你的理解是正確的。

String s = new String(「ABC」);

String S - > s是引用變量,它只是一個指針,這個指針可以被重用,只有約束是當你指向其他對象時,你會鬆開之前的引用。

「ABC」或新字符串(「ABC」)是java中的對象,這是不可變的。

在你的程序中String str被重新用作引用變量,但是寫入文件後會被垃圾收集的實際對象,因爲它將在下一個循環中解除引用。

希望你明白。

+0

非常感謝你! – qmalt

0

您對變量和引用感到困惑。 String對象是不可變的。它意味着你的變量引用的String對象不能被改變。不過,您可以將變量重新分配給新的String對象。