字符串变量“ longestString”如何在此代码中被覆盖?

时间:2020-04-22 16:12:14

标签: java string

我认为这段代码将引发错误,因为每次循环捕获更长的字符串时,字符串变量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;
  }

2 个答案:

答案 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