不可变性意味着参考不能改变

Fie*_*nix 0 java string

这可能是最愚蠢的问题,但我知道Java中的字符串是不可变的.但是,请考虑扫描典型文件的此代码段:

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
      // The value of line appears to be reset after each iteration 
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么line这里没有保留其在扫描过程中的价值?这与readLine()方法本身有关吗?我承认我还没有看到该方法是如何实现的,所以我不确定它是如何工作的.

Bat*_*eba 5

line是对不可变的引用java.lang.String.

line = br.readLine() 指定对返回的引用lineString引用br.readLine().因此,line假设while循环体中的值.

但是,line = br.readLine()也是具有该引用值的表达式.它null通过表达式进行比较(line = br.readLine()) != null.在while对条件估值false一旦这样null:即所有输入已经被读取.

简而言之,字符串在Java中不可变的,但您可以使用引用变量来引用不同的字符串.