Така,
“==” тества за еднаквост в референциите (проверяваме дали са един и същ обект),
докато .equals() проверява за еднаквост на самите стойности (дали са логически
„еднакви“).
(http://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#equals%28java.lang.Object,%20java.lang.Object%29)
Objects.equals() проверява за null-ове преди call-ването на .equals() ,така че няма смисъл да проверяваш.
Ако искаш постепенно да провереяваш дали 2 стринга са с една и съща стойност (value),ще трябва да използваш Objects.equals().
// Тези са с 1 и съща стойност (value)
new String("test").equals("test") // --> true
// ... но не са същия обект
new String("test") == "test" // --> false
// ... нито пък тези
new String("test") == new String("test") // --> false
// ... но тези са защото литералите са ограничени от
// компилатора и от това следва,че са референции към 1 и същ обект
"test" == "test" // --> true
// ... просто използвай Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Почти винаги използвай Objects.equals(). Рядко ще ти се наложи да използваш “==“,например когато знаеш,че сравняваш ограничени стрингове.
Забележка:
Внимавай за null : Kогато използваш “==”,той си го handle-ва без проблеми,но ползваш ли .equals() с null стринг,ще ти даде exception:
String nullString1 = null;
String nullString2 = null;
// Тrue
nullString1 == nullString2;
// Throws an Exception
nullString1.equals(nullString2);
Като цяло това трябва да ти е предостатъчно като информация :)