assertEquals
equals
karşılaştırma yöntemini kullanır . Operatörü assertSame
kullanan 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 a
ve b
bakın aynı nesne . Dilde yerleşiktir ve davranışı farklı sınıflar tarafından değiştirilemez. equals
Yöntem olup, diğer taraftan, sınıflar geçersiz kılınabilir. Varsayılan davranışı ( Object
sınıfta) ==
işleci kullanarak bir kimlik denetimi yapmak olsa da , dahil olmak üzere birçok sınıf String
bir "denklik" denetimi yapmak yerine geçersiz kılar. Durumunda String
, yerine, denetimi a
ve b
aynı 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 String
nesnenin ü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
. equals
Bununla birlikte, kullanırsam , equals
yö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ı String
nesneyi ifade edeceği anlamına gelir . Bu, ==
operatörün true
beklediğinden daha sık dönmesini sağlar .