Java "Equalls" и "=="
Во -первых, давайте кратко поговорим о «равных» и «==»
== Операция сравнивает, равны ли значения двух переменных для основного типа данных.
Для эталонных переменных это означает, что адреса, хранящиеся в куче, одинаковы,
Содержание в стеке одинаково?
Являются ли две переменные, представленные операцией Equals, ссылки на один и тот же объект,
То есть, является ли содержание в куче одинаковым.
Таким образом, == сравнивает адреса 2 объектов, в то время как равные сравнивают содержимое 2 объектов.
Позвольте мне кратко представить класс строк
Класс строки также называется неизменной последовательности символов
String использует частное значение окончательного чара [] для реализации хранения строк. То есть после создания объекта строки, содержимое строки, хранящее в этом объекте, не может быть изменен. Класс строки имеет специальный метод создания, который должен использовать «двойные цитаты для его создания». Например, New String ("123") фактически создает 2 строковые объекты, один создается «123» через «двойные кавычки», а другой создан новым. Тем не менее, периоды, которые они создают, разные, один - период компиляции, а другой - период прогона. Java перегружает оператор + для типа строки, и вы можете напрямую использовать + для объединения двух строк. Вызов метода inger () класса строки во время выполнения может динамически добавлять объекты в пул строк.
Различите два метода создания строковых объектов "" и new ()
Строка - это специальные данные упаковки. Можно использовать:
String str1 = new String ("123"); String str2 = "123";Создайте две формы
Первый - использовать новый () для создания нового объекта, который будет храниться в куче. Новый объект создается каждый раз, когда его называют. (Это на самом деле два, как упомянуто выше, но после существования «123» в постоянном пуле, новый «123» больше не будет создаваться в постоянном пуле)
Второй тип состоит в том, чтобы сначала создать переменную STR для объекта класса строки в стеке, а затем использовать символическую ссылку, чтобы узнать, есть ли «ABC» в пуле постоянной строки. Если нет, храните «ABC» в бассейн Constant String и позвольте STR указать на «ABC». Если уже есть «ABC», тогда напрямую позвольте STR наметить на «ABC».
В настоящее время мы должны обратить внимание
С одной стороны, первый метод написания полезен и сохраняет пространство памяти. В то же время он может в определенной степени улучшить скорость работы программы, поскольку JVM автоматически решает, необходимо ли создавать новый объект на основе фактической ситуации данных в стеке. Для кода строки str = new String ("123");, новые объекты создаются в куче независимо от того, равны ли строковые значения или нет, необходимы ли это для создания новых объектов, тем самым увеличивая бремя в программе. С другой стороны, когда мы определяем класс, используя формат, такой как string str = "123";, мы всегда считаем само собой разумеющимся, что создаем объект Str String Class.
Объект, возможно, не был создан! И, может быть, просто укажите на объект, который был создан ранее. Только с помощью метода нового () мы можем убедиться, что новый объект создается каждый раз.
Пожалуйста, смотрите следующий пример
Пакет TestString; открытый класс TestString {public static void main (string [] args) {string a = "123"; Строка b = "123"; System.out.println (a == b); System.out.println (A.Equals (b)); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- And Содержание двух ссылок на кучу одинаково, поэтому A.Equals (b) является истинной */ String C = New String ("1234"); System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- But c is То же самое, что и deap, так что C.Equals (d) является true */ string e = "a1"; Строка f = "a" +1; System.out.println (e == f); System.out.println (e.equals (f)); System.out.println ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Да, Java имеет определенную перегрузку оператора, но вы не можете использовать перегрузку оператора, который определяет себя "H"; System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!