Подтвердить что ты не робот

Как сравнить две строки равны по стоимости, каков наилучший метод?

Всегда путайте это. Кто может помочь?

4b9b3361

Ответ 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)

если вас это не беспокоит...