Java рассматривает String как особый класс, вы можете инициализировать в обоих направлениях
String a = "adsasdf";
String a = new String("adsasdf");
Вам нужно проявлять особую осторожность, когда вы хотите сравнить с знаком ==
:
String a = "asdf";
String b = "asdf";
System.out.println(a == b); // True
System.out.println(a.equals(b)); // True
String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b); // False
System.out.println(a.equals(b)); // True
Это потому, что в первом случае сохраняются объекты a и b в том, что называется literal pool
, и оба они ссылаются на один и тот же объект, поэтому они равны в обоих направлениях.
Но во втором случае a и b ссылаются на разные объекты, например, когда мы инициализируем любые другие объекты. поэтому они неравны по сравнению с ==
оператором, тогда как они равны по значениям.
В этой ошибке вы используете итерацию в объекте ... В ионной итерации выполняется только массив