Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

Sorunuz mu var? Belki de çoktan soruldu..

0
Java'da equals() ve == farkı nedir?

Çözüldü 1 Cevaplar 1088 Gösterim Java

Java'da string, integer vb. objelerde eşitlik kontrolü yapılırken kullanılan bu fonksiyonların farkı nedir?

if (object1.equals(object2)){
}
if (object1 == object2){
}

1 cevap

2
En İyi Cevap
http://stackoverflow.com/questions/7520432/java-vs-equals-confusion sitesinde yazan bilgiye göre

== ile nesnelerin hafızada aynı yeri tutup tutmaması karşılaştırılır.
.equals ile nesnelerin içindeki değerlerin birbirine eşit olup olmaması karşılaştırılır

Ancak burada benim bu açıklamaya bir itirazım var çünkü:

int a=3;
int b=3;

if (a==b) {
  ...
}

Kodunda a ile b değişkenleri hafızada değişik yerlerde tutulmalarına rağmen if koşulundan geçecektir.

Biraz araştırdıktan sonra anladığım şey şu:

Bu operatörlerin davranışı değişkenlerin tipine göre farklılaşmaktadır. Eğer karşılaştırılan nesneler primitive ise değerler karşılaştırılırken, nesne tipinde değişkenler içinse == operatörü ile hafızadaki konumlar karşılaştırılır. Nesne tipindeki değişkenler için .equals çalışma biçimiyse ilgili nesnenin içinde nasıl tanımlandıysa öyle çalışır. Eğer tanımlı değilse türediği sınıftaki equals fonksiyonuna göre çalışır.
31 Aralık 2015 ahmetbombaci (159 puan) cevapladı
31 Aralık 2015 tolga seçti
2Yorumlar
1 Ocak 2016 kenan (2,835 puan) yorumladı
Güzel yerden yakalamışsın.

Normalde java'da karşılaştırma için == kullanılıyor. Eğer karşılaştırdığın değerler boxed/sınıf bazlı değerler ise ilk karşılaştırılabilecek olan değer bu sınıfların içeriği olmuyor. Keza sınıfların içinde birden fazla bilgi bulunacağı için nasıl karşılaştırılması gerektiğini anlamaz derleyici. Bunun yerine sınıf değişkenlerinin gösterdiği adresler aynı mı diye kontrol eder.

Ama yapı itibariyle bakarsan, primitive(ilkel) tipler zaten sınıf bazlı değişkenler değil ve içinde barındırdıkları bilgi bir adres bilgisi değil. Bu yüzden direk olarak değer karşılaştırılması yapılır.  

.equals metoduna gelince, sınıf bazlı veri tiplerini karşılaştırmak istediğin zaman, bir sınıfın iki mensubunu nasıl karşılaştırmalıyız sorusunun cevabı bu metod içinde verilir. Yani sınıfın(class instance, türkçesini bilmiyorum) içindeki hangi alanlar birbirine eşitse bu iki sınıf birbirine eşit denir, bu sorunun cevabını verdiğin alandır. Java da standard olarak iki sınıfı karşılaştıracağı zaman equals metodunu otomatikmen çağırır.
5 Ocak 2016 buzel (551 puan) yorumladı
biraz daha somut örnek verebilir misiniz? daha iyi anlamak açısından ufak bir sudo kod vs. olsa iyi olabilir.
...