По какой-то причине, люди, которые делают Java решили, что ==
не должна использоваться для сравнения строк, так что у вас есть использовать
checkNine.equals("99999");
Посмотрите на следующий код:
String str1 = "abc";
String str2 = str1;
В первой строке создается и сохраняется новая строка в памяти вашего компьютера. str1
сам по себе не является строкой, а ссылкой на эту строку. Во второй строке str2
установлено равным str1
. str2
есть, как str1
, только ссылка на место в памяти. Однако, вместо создания совершенно новой строки, str2
является ссылкой на то же место в памяти, которое str1
является ссылкой на. ==
проверяет, соответствуют ли ссылки, но .equals()
проверяет, соответствует ли каждый символ в строке тем же самым, что и соответствующий символ в другой строке.
boolean bool1 = (str1 == str2);
boolean bool2 = str1.equals(str2);
Если этот код были добавлены выше, что код, как bool1
и bool2
бы быть правдой.
String str1 = "abc";
String str2 = new String(str1);
boolean bool1 = (str1 == str2);
boolean bool2 = str1.equals(str2);
В этом случае bool2
по-прежнему верно, но bool1
ложно. Это связано с тем, что str2
не был равен str1
, так что ссылки не относятся к таким же образом место в памяти, которое str1
является ссылкой на. Вместо этого new String(str1)
создает полностью новую строку, которая имеет значение str1
. str1
и str2
являются ссылками на два разных места в памяти. Они содержат одно и то же значение, но в корне отличаются тем, что они хранятся в двух разных местах, и поэтому это две разные вещи. Если я заменил new String(str1)
на "abc"
или str1
, bool1
будет правдой, поскольку без ключевого слова new
JVM создает новую строку для хранения в памяти, если это абсолютно необходимо. new
заставляет JVM создавать совершенно новую строку, независимо от того, имеет ли какое-либо место в памяти то же значение, что и новая создаваемая строка.
.equals()
является медленным, но в целом более полезным, чем ==
, что намного быстрее, но часто не всегда дает желаемый результат. Существует много раз, когда ==
может использоваться с тем же результатом, что и .equals()
, но может быть трудно сказать, когда это время. Если вы не знающий программист, делающий что-то там, где скорость важна, я бы предположил, что вы всегда используете .equals()
.
Форматирование кода. –
Да. Люди вряд ли найдут время, чтобы помочь вам, если вы не можете потратить немного времени на форматирование своего сообщения, чтобы оно было читаемым. –
Или сделать сообщение меньшего размера, содержащее только соответствующие материалы. – Ingo