我认为这段代码将引发错误,因为每次循环捕获更长的字符串时,字符串变量longestString
都会被覆盖,但是它工作得很好,并且变量每次都获取新的字符串。
有人可以解释吗?
public static String getLongestString(String[] array) {
int maxLength = 0;
String longestString = null;
for (String s : array) {
if (s.length() > maxLength) {
maxLength = s.length();
longestString = s;
}
}
return longestString;
}
答案 0 :(得分:0)
我想您会因为字符串是不可变的而期望发生异常,对吧?
String longestString
(和其他String变量)仅是对对象的引用。因此longestString = s
仅更改对s
(数组中提供的String对象)的引用。因此,您没有收到异常,因为您没有更改String对象
此arcticle可以进一步阐明
答案 1 :(得分:0)
您发现的是常量值和变量值之间的区别。
变量可以被多次分配,它们将丢弃先前的值并采用新的值。您可以像盒子一样替换它的内容。试试这个:
int x = 10;
x = 23;
x = 99;
System.out.println("x = " + x);
另一方面,常量只能分配一次:
final int x = 10;
x = 23; // And stop because this throws an error