2016-03-30 23 views
-2
 String str1="hello"; 
     String str2="hell"; 
     String str3=str2+"o"; 

     System.out.println(str1==str3); // fasle 
     System.out.println(str1.hashCode()); // 99162322 
     System.out.println(str2.hashCode()); // 3198781 
     System.out.println(str3.hashCode()); // 99162322 

benim sorum neden dizge1 == str3 dönüş yanlışkarma koduduraynı yoksa? i == operatörü ve karma kodu çalışmahascode() ve == operatör sözleşmesi?

+2

Hiç değilse, büyük harfle başlayan iki şeyde _ = _, '==' işlevini kullanırsanız, zaten kötüye kullanmış olursunuz. Her zaman, _always_, seni almak için '==' olduğunu varsayalım. Daima her zaman '.equals' kullanın. –

+0

Farklı dizeler aynı karma kodu içerebilir. Buna hashing.http dosyasında bir çarpışma denir: //eclipsesource.com/blogs/2012/09/04/the-3-things-you-should-know-about-hashcode/ –

+0

@LouisWasserman: java'da nasıl çalıştığını anlatabilir misin = –

cevap

0

yerine Eğer

System.out.println(str1.equals(str3)); 
deneyin ".equals" kullanmalıdır, dize türü için koşullu deyimi için "==" işaretleri kullanılarak olarak internal bilmek istiyorum daha fazla bilgi için

, dize türü için "==" Java operatörü, açıklamak için https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)

bakın .equals conten karşılaştırmak ise bu "referans ile çağrı" tarafından içeriğinin adresini karşılaştırır Adresin ts.

vb int, şamandıra için bu == operatörün iki nesne aynı örneği sadece bu durum geçerlidir

0

"değeri çağrı" değerini karşılaştırır, "==" kullanarak yazın.

Eşit yöntem, değeri değil, değeri karşılaştırır. Herhangi bir nesnede bu yöntemi kendiniz uygulayabilir ve nesnelere kalitenin ne anlama geldiğini uygulayabilirsiniz. Eşit yöntemini geçersiz kıldığınızda, karma kodu yöntemini de geçersiz kılmalısınız. Karma kod, dizilerdeki nesne özelliğinin karşılaştırılmasını hızlandırmak için kullanılır. İki kodda karma kodu farklıysa, çağrıları çağırmak gerekli değildir. Bununla birlikte, karma kodu aynıysa, nesnelerin eşit olduğu% 100 değil!

5

Dize str1 = "merhaba" bildirirsek, Nesne SCP'de (String İçerik Havuzu) tahsis edilmiştir, ancak str3 için bellek çalışma zamanı işlemi (str3 = str2 + "o") nedeniyle yığında ayrılacaktır. Yani, hashcode bile str1 ve str3 değişkenlerinin aynı içeriği farklı yerlerde olacaktır. Yani, == her zaman referans için kontrol edin ve Dize sınıfı eşittir() için içerik kontrol edin.