После того, как статья о строках в Java была опубликована, друг оставил мне сообщение и сказал: Сравнивать строки с равными недостаточно, зачем использовать "=="? На самом деле, в статье я хочу сказать,Различные проявления двух методов объявления строк Java в куче памяти, В процессе написания кода, во избежание повторного создания объекта, старайтесь использовать String s1 = "123" вместо String s1 = new String("123"), поскольку JVM оптимизирует первое.
Итак, поговорим сегодня об эквалайзерах, особо нечего сказать по коду:
Выполните его, результат будет следующим:
В интервью задаются вопросы, в чем разница между «==» и «равно», и даже поиск «равно» в Baidu автоматически связывает разницу между «равно» и «==».
Автор всегда считал, что между ними нет необходимой связи. В ссылочном типе "==" предназначено для сравнения, указывают ли две ссылки на один и тот же адрес (один и тот же объект) в куче памяти, иequals — распространенный метод, результат, возвращаемый этим методом, зависит от его собственной реализации.. Давайте сначала взглянем на класс Person, в нем нет метода equals, так почему бы не сообщить об ошибке? В Java, если класс не наследует другие классы, то по умолчанию он наследует класс Object.Откройте класс Object и найдите следующий код.Отсюда наследуется метод equals класса Person.
Это очень просто. Всего одно предложение кода, чтобы определить, указывают ли две ссылки на один и тот же объект. Производительность двух объектов Person в куче памяти показана на следующем рисунке:
Таким образом, код person1.equals(person2) эквивалентен person1 == person2, конечно же, напечатанный результат ложный. Давайте еще раз взглянем на класс Integer, реализация equals выглядит следующим образом:
Когда код выполняется для System.out.println(itr.equals(lon)), он определяет, имеет ли входящий объект lon тип Integer, где lon имеет тип Long, поэтому, конечно, напечатанный результат будет ложным.
И, наконец, наша реализация String
Когда код выполняется для: System.out.println(s3.equals(s4)), поскольку все строки, хранящиеся в базовом массиве символов, равны {'1','0','0'}, конечно, печать правда.
Примечание. Все примеры кодов в этом столбце были загружены в общедоступную учетную запись: sayayJava.
Если вам нравится эта серия статей, пожалуйста, поставьте лайк или поделитесь со мной. Ваша поддержка является движущей силой для меня, чтобы продолжать. Вы также можете оставить сообщение в области комментариев. Если у вас есть возможность, эта колонка объяснит это. Наконец , не забудьте обратить внимание. Проверьте меня.
Перепечатка приветствуется, но с указанием "автора" и "оригинального адреса". Пожалуйста, сохраните этот абзац в тексте для перепечатки, спасибо за уважение авторских прав. Для коммерческого воспроизведения или публикации, пожалуйста, свяжитесь с автором для получения разрешения.
Предыдущий:Эти вещи о строках Java
Следующий:Массивы в Java