Все объекты гарантированно имеют метод .equals()
, поскольку Object содержит метод, .equals()
, который возвращает логическое значение. Задача подкласса переопределять этот метод, если требуется дополнительное определение определения. Без него (т. Е. Используя ==
) только адреса памяти проверяются между двумя объектами для равенства. String переопределяет этот метод .equals()
и вместо использования адреса памяти возвращает сравнение строк на уровне символа для равенства.
Ключевое замечание состоит в том, что строки хранятся в одном пуле, поэтому после создания строки он всегда хранится в программе по тому же адресу. Строки не меняются, они неизменяемы. Вот почему это плохая идея использовать регулярную конкатенацию строк, если у вас есть серьезное количество обработки строк. Вместо этого вы будете использовать предоставленные классы StringBuilder
. Помните, что указатели на эту строку могут измениться, и если вам было интересно увидеть, были ли два указателя одинаковыми ==
, это был бы прекрасный способ. Строки сами не делают.
Нет способа гарантировать постоянство атрибутов элемента.
Если вы хотите убедиться, что клиент не вмешивается в данные, вы можете использовать подписанные куки . Вам нужно будет сохранить серверную часть ключа подписи и использовать некоторую библиотеку для установки серверной стороны cookie. Для узлов и экспрессов вы можете использовать cookie-парсер .
Никто без знания ключа подписи не сможет справиться с подписанными данными, если подпись не станет недействительной.