【问题标题】:Reading Strings from file (line by line) JAVA从文件中读取字符串(逐行)JAVA
【发布时间】:2017-01-24 10:31:35
【问题描述】:

我是编程新手。我对 Java 中的字符串有误解。据我所知,Java 中的字符串是不可变的。这意味着它不能更改,但是我已经看到很多逐个字符串读取文件的示例,并且 currentString 在每次迭代中总是被更改。请帮助我理解为什么它是可能的并写下来。 来自 URL 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();
        }
    }

【问题讨论】:

  • 不可变意味着字符串本身的实例无法更改。当您重新分配变量时,您正在为其分配一个不同的字符串实例,旧值不会更改。

标签: java string immutability


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    String s = new String("ABC");

    String S -> s 是引用变量,它只是一个可以重用的指针,唯一的限制是当你指向其他对象时,你会失去前一个对象的引用。

    "ABC" 或 new String("ABC") 是 java 中的对象,它是不可变的。

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

    希望你能理解。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多