assertEqualsequalskarşılaştırma yöntemini kullanır . Operatörü assertSamekullanan farklı bir iddia var ==.
Neden ==dizelerle kullanılmaması gerektiğini anlamak için ne yaptığını anlamalısınız ==: bir kimlik kontrolü yapar. Olduğunu, a == bçekler olmadığını görmek için ave bbakın aynı nesne . Dilde yerleşiktir ve davranışı farklı sınıflar tarafından değiştirilemez. equalsYöntem olup, diğer taraftan, sınıflar geçersiz kılınabilir. Varsayılan davranışı ( Objectsınıfta) ==işleci kullanarak bir kimlik denetimi yapmak olsa da , dahil olmak üzere birçok sınıf Stringbir "denklik" denetimi yapmak yerine geçersiz kılar. Durumunda String, yerine, denetimi ave baynı nesneyi,a.equals(b) atıfta bulundukları nesnelerin her ikisi de tam olarak aynı karakterleri içeren dizeler olup olmadığını kontrol eder.
Analoji zamanı: Her Stringnesnenin üzerinde bir şey yazılı bir kağıt parçası olduğunu hayal edin . Diyelim ki üzerlerinde "Foo" yazılı iki kağıt parçası ve üzerine "Bar" yazılı başka bir kağıt var. İlk iki kağıdı alıp ==karşılaştırmak için kullanırsam geri döner falseçünkü aslında "bunlar aynı kağıt parçası mı?" Kağıda yazılanlara bile bakmasına gerek yok. İki kağıt verdiğim gerçeği (aynı kağıt yerine iki kez) geri döneceği anlamına geliyor false. equalsBununla birlikte, kullanırsam , equalsyöntem iki kağıdı okuyacak ve aynı şeyi ("Foo") söylediklerini görecek ve böylece geri dönecektir true.
Dizelerle kafa karıştırıcı olan bit, Java'nın "stajyer" Dizeler kavramına sahip olması ve kodunuzdaki herhangi bir dize değişmezinde otomatik olarak (etkin bir şekilde) gerçekleştirilmesidir. Bu, kodunuzda iki eşdeğer dize değişmezine sahipseniz (farklı sınıflarda olsalar bile), aslında her ikisinin de aynı Stringnesneyi ifade edeceği anlamına gelir . Bu, ==operatörün truebeklediğinden daha sık dönmesini sağlar .