Хотя вопрос о строках Java «==" и «равно» является самым основным вопросом в изучении Java, все еще есть много студентов, которые только что изучили Java, и которые не совсем понимают принципы, которые я недавно обсуждал с друзьями. , поэтому я написал статью, чтобы поделиться с вами своим пониманием.
Сначала давайте посмотрим на пример:
Скопируйте код кода следующим образом:
общественный класс TestStringEquals {
public static void main(String[] args) {
Строка a = "тест";
Строка b = «тест»;
Строка c = новая строка («тест»);
Строка d = новая строка («тест»);
Строка е = а;
Строка f = новая строка (а);
Строка г = а + "";
System.out.println(a == b ? "выражение /"a==b/" истинно"
: "выражение /"a==b/" неверно");
System.out.println(a == c ? "выражение /"a==c/" истинно"
: "выражение /"a==c/" неверно");
System.out.println(c == d ? "выражение /"c==d/" истинно"
: "выражение /"c==d/" неверно");
System.out.println(a == e ? "выражение /"a==e/" истинно"
: "выражение /"a==e/" неверно");
System.out.println(a == f ? "выражение /"a==f/" истинно"
: "выражение /"a==f/" неверно");
System.out.println(a == g ? "выражение /"a==g/" истинно"
: "выражение /"a==g/" неверно");
if (a.equals(b) && b.equals(c) && c.equals(d) && d.equals(e)
&& e.equals(f) && f.equals(g)) {
Система.out
.println("a равно b равно c равно d равно e равно f равно g");
}
}
}
Если у вас еще нет ответа, давайте попробуем это сделать. Можете ли вы гарантировать, что все правильно?
Ответ анонсирован ниже:
Скопируйте код кода следующим образом:
выражение «a==b» истинно
выражение "a==c" неверно
выражение "c==d" неверно
выражение «a==e» истинно
выражение "a==f" неверно
выражение "a==g" неверно
<div style="text-align: left;"></div>a равно b равно c равно d равно e равно f равно g
Чтобы хорошо понять такого рода проблемы, лучше всего иметь глубокое понимание механизма и принципов методов «==» и «equals» String в Java. Каждый должен знать, что «равно» означает сравнение содержимого строк. Поскольку все содержимое строк в приведенной выше программе является «тестовым», все они будут равны при сравнении с равными.
Но знаете ли вы, что метод равенства и метод «==" базового класса Object в Java на самом деле одно и то же? Просто после того, как класс String наследует класс Object (все классы в Java наследуют класс Object), он перегружает метод равенства, делая его сравнением содержимого строки.
После хорошего понимания равенства давайте теперь изучим тонкости метода «==".
«==" — это оператор в Java. Содержимое, которое он сравнивает, — это указатели двух объектов, которые являются адресом фактического объекта. Поэтому легко понять, что e==a возвращает true.
Давайте еще раз посмотрим на сравнение между c и d. Когда мы видим новое ключевое слово, это означает, что оба c и d повторно запросили адрес памяти, а затем присвоили значение «test», поэтому c==d возвращает false. Это понятно так же
Операция «==" между a, c, d и f возвращает false.
Затем давайте посмотрим на g= a + «». Хотя мы не видим нового ключевого слова, поскольку оператор «+» класса String перегружен, новая строка обязательно будет добавлена в перегруженный метод, поэтому она станет приведенной выше. ситуация. Тогда самое сложное для понимания — это сравнение между a и b. На самом деле это результат оптимизации компилятора Java. В компиляторе Java есть область хранения, называемая пулом строковых констант. Поскольку String a = «test». После компиляции оператора «test» будет сохранен в этом пуле строковых констант. Затем, когда b будет определен снова, b все еще указывает на эту область, поэтому a и b по-прежнему указывают на одну и ту же область. Итак, a==b возвращает true.