从文件中读取字符串(逐行)JAVA

时间:2017-01-24 10:31:35

标签: java string immutability

我是编程方面的新手。我对Java中的Strings有误解。据我所知,java中的字符串是不可变的。这意味着它无法更改,但我已经看到许多读取文件的示例逐字符串,并且currentString总是在每次迭代中都被更改。请帮助我理解为什么它可能并写。 网址Java read large text file with separator

中的示例
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();
        }
    }

3 个答案:

答案 0 :(得分:0)

在您的代码中sCurrentLine不是对象,而是对对象的引用。每次迭代行时,都会引用一个新的String对象,因此实际上sCurrentLine的值不会改变,但它的引用会更改为新的{{1}每次迭代时的对象当然包含不同的值。

请参阅this帖子,该文章更好地解释了字符串的不变性。

答案 1 :(得分:0)

在Java中,String对象是不可变的,您的理解是正确的。

String s = new String(“ABC”);

字符串S - > s是引用变量,它只是一个指针,只能重用约束,当你指向其他对象时,你将松开以前的引用。

“ABC”或新的String(“ABC”)是java中的对象,它是不可变的。

在你的程序中,字符串str被重用作引用变量,但实际的对象在写入文件后将被垃圾收集,因为它将取消引用下一个循环。

希望你明白。

答案 2 :(得分:0)

您对变量和引用感到困惑。 String对象是不可变的。这意味着无法更改变量引用的String对象。但是,您可以将变量重新分配给新的String对象。

相关问题