search
Giriş
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
0 oy
9.0k gösterim

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){
}
Java kategorisinde 2.0k puan
yeniden açıldı

1 cevap

3 oy
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.
131 puan
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.
biraz daha somut örnek verebilir misiniz? daha iyi anlamak açısından ufak bir sudo kod vs. olsa iyi olabilir.

İlgili sorular

1 oy
1 cevap 243 gösterim
243 gösterim
Merhabalar, Ben if else-if ile bir değeri kontrol ettiriyorum, else kısmında diğer kontrol ettirdiğim değerlerden farklı veya null değer dönebiliyor. a.equals("b") olarak yaptığımda null gelirse patlıyor. "b".equals(a) olarak yapınca burda patlamıyor sonuc alabiliyorum. Acaba bu ikisi arasında fark nedir yardımcı olabilir misiniz?
19 Mart 2020 Java kategorisinde kupanintorunu 365 puan sordu
0 oy
1 cevap 1.3K gösterim
1.3K gösterim
Java programa dilinde Error ve Exception kavramları diğer dillerde de var mı öncelikle? İkinci olarak bu iki teri arasındaki temel ve genel farklar nelerdir?
1 Eylül 2018 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.8K gösterim
1.8K gösterim
Bir maven uygulamasını ayağa kaldırırken, JDK yerine JRE seçildiği için kalkmıyordu. Bu ikisinin ne farkı var acaba acıklayabilir misiniz?
18 Aralık 2016 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 762 gösterim
762 gösterim
Java 8'de map() ve flatMap() kullanım amacı mapping yapmak . Ancak ne farkı var?
6 Ekim 2020 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
2 cevap 1.2K gösterim
1.2K gösterim
Java'da Set , HashSet ve TreeSet arasında ne fark vardır?
1 Ekim 2020 Java kategorisinde tolgacelik.art 2.0k puan sordu