şimdi 1-2 gün oldu başlayalı da uzatmadan soruma geçim. String ile if'i birlikte kullanırken işin içine kullanıcıyı sokunca problem yaşadım. şöyle anlatayım. şu kodlamayı yapınca istediğim oluyor:
String isim; isim = "Efe"; if(isim == "Efe") System.out.print("asdasdas")
bu şekilde sorunsuz bir şekilde yazıyı görebiliyorken:
String isim; isim = scan.nextLine(); if(isim == "Efe") System.out.print("asdasdas")
bu şekilde ismi Efe yazdığım taktirde ( büyük küçük harfe dikkat ediyorum) yazı gözükmüyor. Gözükmemesi için bi neden göremiyorum. Ya da bunun farklı bi yöntemi mi var kullanıcıdan cevap alıyorsam. java kütüphanesinden de scanner import edili tabiki Scanner scan = new Scanner(System.in); komutum da var. zaten öyle olmasa cevap da veremezdim kullanıcı olarak nese öyle işte...
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Java nın temeline inersek eğer ( bana göre hatalı bir yaklaşımdır ) hem primitive ( ilkel ) değişkenler hem de objeler mevcut. ilkel değişkenleri ( int, double, long vs. vs. ) "==" operatörü ile karşılaştırabilirsiniz fakat java.lang.Object nesnesinden türeyen nesnesler için equals fonksiyonu kullanılmalıdır.
Ha derseniz equals fonksiyonu ne yapar ne eder derseniz, eğer o da override edilmemişse nesnenin hashCode una bakar. Örnek vermek gerekirse elimizde "id" ve "name" diye iki degiskeni olan bir obje olsun. aşağıdaki gibi.
public class Sample {
int id; String name;
}
eğer bu sample cinsinden iki nesne yaratır ve karşılaştırırsak equals methodunun doğru ( true ) dünmesi için iki nesnenin de "id" ve "name" değerleri eşit olmalıdır. Fakat dersek ki "id leri eşit ise ikisi de aynı obje sayılsın ben öyle istiyorum". işte o zaman equlas ve hashcode metodlarını aşağıdaki gibi override etmeliyiz. Bu arada apache nin commons-lang kütüphanesine ait HashCodeBuilder ve EqualsBuilder.
@Override public int hashCode() { return new HashCodeBuilder(17, 31). //rastgele farklı iki asal sayı append(id). toHashCode(); }
@Override public boolean equals(final Object obj){ if(obj instanceof Bean){ final Bean other = (Bean) obj; return new EqualsBuilder() .append(id, other.id) .isEquals(); } else{ return false; } }
Java nın temeline inersek eğer ( bana göre hatalı bir yaklaşımdır ) hem primitive ( ilkel ) değişkenler hem de objeler mevcut. ilkel değişkenleri ( int, double, long vs. vs. ) "==" operatörü ile karşılaştırabilirsiniz fakat java.lang.Object nesnesinden türeyen nesnesler için equals fonksiyonu kullanılmalıdır.
Ha derseniz equals fonksiyonu ne yapar ne eder derseniz, eğer o da override edilmemişse nesnenin hashCode una bakar. Örnek vermek gerekirse elimizde "id" ve "name" diye iki degiskeni olan bir obje olsun. aşağıdaki gibi.
public class Sample {
int id; String name;
}
eğer bu sample cinsinden iki nesne yaratır ve karşılaştırırsak equals methodunun doğru ( true ) dünmesi için iki nesnenin de "id" ve "name" değerleri eşit olmalıdır. Fakat dersek ki "id leri eşit ise ikisi de aynı obje sayılsın ben öyle istiyorum". işte o zaman equlas ve hashcode metodlarını aşağıdaki gibi override etmeliyiz. Bu arada apache nin commons-lang kütüphanesine ait HashCodeBuilder ve EqualsBuilder.
@Override public int hashCode() { return new HashCodeBuilder(17, 31). //rastgele farklı iki asal sayı append(id). toHashCode(); }
@Override public boolean equals(final Object obj){ if(obj instanceof Bean){ final Bean other = (Bean) obj; return new EqualsBuilder() .append(id, other.id) .isEquals(); } else{ return false; } }
Java gibi dillerde programcının eline yeterince imkan verilmediği için her yapmak istediğimiz şeyde kütüphanelerle, sınıflarla, metodlarla boğuşmak zorunda kalıyoruz. C++ ta yukarıdaki örneklerdeki gibi işlemler çocuk oyuncağıdır, hiçbir harici koda ihtiyacınız yoktur. Birde c++ a zor derler.
Geçen javada bir nesnenin uzunluğunu (bellekte kapladığı alan) öğrenmeye ihtiyaç duydum. Bir bakayım dedim javada nasıl oluyor diye, verilen örneği görünce başka bir yol aramaya karar verdim.
String isim;
isim = "Efe";
if(isim == "Efe")
System.out.print("asdasdas")
bu şekilde sorunsuz bir şekilde yazıyı görebiliyorken:
String isim;
isim = scan.nextLine();
if(isim == "Efe")
System.out.print("asdasdas")
bu şekilde ismi Efe yazdığım taktirde ( büyük küçük harfe dikkat ediyorum) yazı gözükmüyor. Gözükmemesi için bi neden göremiyorum. Ya da bunun farklı bi yöntemi mi var kullanıcıdan cevap alıyorsam. java kütüphanesinden de scanner import edili tabiki Scanner scan = new Scanner(System.in); komutum da var. zaten öyle olmasa cevap da veremezdim kullanıcı olarak nese öyle işte...
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.