Всегда путайте это. Кто может помочь?
Как сравнить две строки равны по стоимости, каков наилучший метод?
Ответ 1
string1.equals(string2)
- путь.
Возвращает true
, если string1
равно значению string2
. В противном случае он вернет false
.
Ответ 2
string1.equals(string2)
- это правильный способ сделать это.
String s = "something", t = "maybe something else";
if (s == t) // Legal, but usually results WRONG.
if (s.equals(t)) // RIGHT way to check the two strings
/* == will fail in following case:*/
String s1 = new String("abc");
String s2 = new String("abc");
if(s1==s2) //it will return false
Ответ 3
Вы можете либо использовать оператор == или метод Object.equals(Object).
Оператор == проверяет, являются ли оба объекта одним и тем же объектом, тогда как метод equals проверяет одинаковое содержимое (длина и символы).
if(objectA == objectB) {
// objects are the same instance. i.e. compare two memory addresses against each other.
}
if(objectA.equals(objectB)) {
// objects have the same contents. i.e. compare all characters to each other
}
Что вы выбираете, зависит от вашей логики - используйте ==, если можете и равны, если вы не заботитесь о производительности, это довольно быстро.
String.intern() Если у вас есть две строки, вы можете их интернировать, т.е. создать JVM для создания пула String и вернуть вам экземпляр, равный экземпляру пула (путем вызова String. стажер()). Это означает, что если у вас есть две строки, вы можете вызвать String.intern() для обоих, а затем использовать оператор ==. String.intern(), однако, является дорогостоящим и его следует использовать только в качестве оптимизации - он рассчитывается только для нескольких сравнений.
Все внутрикодовые строки, однако, уже интернированы, поэтому, если вы не создаете новые строки, вы можете использовать оператор ==. В общем, вы довольно безопасны (и быстро) с помощью
if(objectA == objectB || objectA.equals(objectB)) {
}
если у вас есть сочетание двух сценариев. Встроенный
if(objectA == null ? objectB == null : objectA.equals(objectB)) {
}
также может быть весьма полезен, он также обрабатывает нулевые значения, так как String.equals(..) проверяет значение null.
Ответ 4
Вы должны использовать какой-либо метод String#equals(Object)
. Однако есть некоторые тонкости в том, как вы должны это делать:
Если у вас есть строковый литерал, вы должны использовать его следующим образом:
"Hello".equals(someString);
Это потому, что строковый литерал "Hello"
никогда не может быть нулевым, поэтому вы никогда не столкнетесь с NullPointerException
.
Если у вас есть строка и другой объект, вы должны использовать:
myString.equals(myObject);
Вы можете убедиться, что на самом деле вы получаете равенство строк, делая это. Насколько вам известно, myObject
может быть класса, который всегда возвращает true
в свой метод equals
!
Начните с объекта с меньшей вероятностью null, потому что это:
String foo = null;
String bar = "hello";
foo.equals(bar);
будет бросать NullPointerException
, но это:
String foo = null;
String bar = "hello";
bar.equals(foo);
не будет. String#equals(Object)
будет корректно обрабатывать случай, когда его параметр равен NULL, поэтому вам нужно только беспокоиться об объекте, который вы разыскиваете - первый объект.
Ответ 5
==
проверяет, являются ли они фактически одним и тем же объектом в памяти (что, как правило, иногда является истинным, поскольку оба они могут быть из пула), где equals()
переопределяется java.lang.String
для проверки каждого символа для обеспечения подлинного равенства. Таким образом, equals()
- это то, что вы хотите.
Ответ 6
Не забывая
.equalsIgnoreCase(String)
если вас это не беспокоит...