这可能是最愚蠢的问题,但我知道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()
方法本身有关吗?我承认我还没有看到该方法是如何实现的,所以我不确定它是如何工作的.
line
是对不可变的引用java.lang.String
.
line = br.readLine()
指定对返回的引用line
的String
引用br.readLine()
.因此,line
假设while
循环体中的值.
但是,line = br.readLine()
也是具有该引用值的表达式.它null
通过表达式进行比较(line = br.readLine()) != null
.在while
对条件估值false
一旦这样null
:即所有输入已经被读取.
简而言之,字符串在Java中是不可变的,但您可以使用引用变量来引用不同的字符串.