folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Enteresan Bir Kod Olayı (YAZILIM)



Enteresan Bir Kod Olayı (YAZILIM)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    ozgunlu bunu yazdı

    Almaz, ikisi ayni deger farkli objeler. Primitive type degiller, objeleri kiyaslarken equals kullanilir.

    Ayrıca; @unbalanced ve @theholiqan' ın dediği gibi bazen karşılaştırır bazen karşılaştırmaz diye bir olay yok

    Burdan da cevabını bulabilirsin;

    http://stackoverflow.com/questions/7520432/java-vs-equals-confusion

     

     

    hocam konuda linki verdim..

    5.0 ile 5 ie karşılaştır hem equals ile hem == bak bakalım farklı sonuç dönüyor mu :)

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    unbalanced bunu yazdı
    ozgunlu bunu yazdı

    Almaz, ikisi ayni deger farkli objeler. Primitive type degiller, objeleri kiyaslarken equals kullanilir.

    Ayrıca; @unbalanced ve @theholiqan' ın dediği gibi bazen karşılaştırır bazen karşılaştırmaz diye bir olay yok

    Burdan da cevabını bulabilirsin;

    http://stackoverflow.com/questions/7520432/java-vs-equals-confusion

     

     

    hocam konuda linki verdim..

    5.0 ile 5 ie karşılaştır hem equals ile hem == bak bakalım farklı sonuç dönüyor mu :)

     

    hocam 5.0' ı double olarak tanımlarsan eşit çıkar == de.

    Ama sen obje olarak tanımlıyorsun long olarak, bellekte tutulduklar yerler farklı. == metodu adresine bakıyor, primitive type ler için geçerli.

    equals obje karşılaştırmalarında kullanılır, arkadaşın tanımladığı long değeri obje, keza string' de java da objedir. sen bunları == ile kıyaslamaya kalkarsan her defasında hata alırsın.

    ama equals bi doğru verir bi yanlış yoktur

     

    ozgunlu tarafından 03/Şub/16 13:06 tarihinde düzenlenmiştir

    Hello, i am nothing. I come from Neverland.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hocam eski konuda açıkladım biraz, yanlışın doğrunun alakası tipiyle ilgilidir.  O yüzden bu tarz şeyleri kullanırken tiplerini gözönünde bulundurmak gerekir. Bir yanlış bir doğru çalışır diye diyen bir şey olmadı, farklı tipte değerler verirsen farklı sonuçlar alabilirsin o yüzden dikkatli olunması lazım dedim önceki konuda ve linkini de verdim.

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Dün bu konu üstünde baya bi araştırma yaptım ne kadar basit bir konu olsa bile bazen if-else yazarken hiçbir şekilde kontrole etmezdim çalışıp çalışmadığını çünkü == ibaresi benim için EŞİT se anlamını ifade ediyordu bu gün anladım ki o kadar kolay değil biryerde String ifade karşılaştırırken 0 hata almak için önce string değeri parçalayıp CHAR dizi yaparak yani tek tek ascii kodlarını karşılarştırmak en iyisi Int-double gibi sayısal değerlerde @unbalanced abimin dediği gibi çıkarma işlemi yapmak en mantıklısı çünkü her zaman WebService/Database vs vs dışardan gelen veriler aynı tipte olmuyor. O yüzden == kullanmak biraz saçma imiş zaten ikisinin eşit olmasının sebepleri var ki olmalı yoksa eşitlik kavramı ortada olmaz biz yazılımcılar eşitse gibi ibare kullanmamamız gerekiyor . çünkü en ince ayrıntısına kadar bilmeliyiz çoğu şeyi.. Sayılarla işlemde çıkarma String ifadede ascii karşılaştırma mantıklı olandır . Tembellik edik == kullanmamalıymışız .. Bazıları bu görüşü gömüyor adam diyor 1 işlemi neden uzatayım aslında doğru program yavaşlar ama 0 hata için bunu göze almak gerekir @ozgunlu : Hocam sizin dediğiniz equals metodunun bir yararı yok bize denedim çünkü zaten o 2 veriyi karşılaştırıyor gene aynı kapıya çıkıyor yani @unbalanced abimin dediği gibi çıkarma işlemi en sağlı çalışanı bunu öğrendiğim iyi oldu teşekkürler :)

     

    @sLeymN Hocam Long ve long aynı kapıya çıkıyor Long sadece long'un kalıntısı gibi birşey sanırım o yüzden bununla ilgili olacağını sanmıyorum çünkü 2 String değeri de karşılaştırırken düzgün çalışmıyor LeymN

    sLey


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    whopper
    whopper's avatar
    Kayıt Tarihi: 26/Haziran/2008
    Erkek

    Hacı object oriented olayına alışıp kod yazıyorsun ama == ten doğan sıkıntıyla nasıl ilk defa yeni karşılaşıyorsun onu anlamadım :S  normalde ilk yapılan hatalardan biridir bu.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek
    whopper bunu yazdı

    Hacı object oriented olayına alışıp kod yazıyorsun ama == ten doğan sıkıntıyla nasıl ilk defa yeni karşılaşıyorsun onu anlamadım :S  normalde ilk yapılan hatalardan biridir bu.

    Bilmiyorum daha önce hiç karşıma çıkmadı gerçekten :/ genelde Equals ile çözüyordum fakat bu sefer olmadı o yüzden dün Equals da çalışmayınca kafamda birsürü soru işareti oldu .0 gibi gösterse diyeceğim ki .0 olduğu için karşılaştrmada hata oluyor ama öyle bi durumda olmadı çok ileri düzey bi programcı olmadığım için böyle bi durumla ilk defa karşılaştım :/ Yavaş yavaş öğreniyorum böyle basit şeyleri bazen büyüğe oynayınca basitler büyükten daha çok sıkıntı çıkarıyor Şekil A :)


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    MhmdAlmz bunu yazdı

    Dün bu konu üstünde baya bi araştırma yaptım ne kadar basit bir konu olsa bile bazen if-else yazarken hiçbir şekilde kontrole etmezdim çalışıp çalışmadığını çünkü == ibaresi benim için EŞİT se anlamını ifade ediyordu bu gün anladım ki o kadar kolay değil biryerde String ifade karşılaştırırken 0 hata almak için önce string değeri parçalayıp CHAR dizi yaparak yani tek tek ascii kodlarını karşılarştırmak en iyisi Int-double gibi sayısal değerlerde @unbalanced abimin dediği gibi çıkarma işlemi yapmak en mantıklısı çünkü her zaman WebService/Database vs vs dışardan gelen veriler aynı tipte olmuyor. O yüzden == kullanmak biraz saçma imiş zaten ikisinin eşit olmasının sebepleri var ki olmalı yoksa eşitlik kavramı ortada olmaz biz yazılımcılar eşitse gibi ibare kullanmamamız gerekiyor . çünkü en ince ayrıntısına kadar bilmeliyiz çoğu şeyi.. Sayılarla işlemde çıkarma String ifadede ascii karşılaştırma mantıklı olandır . Tembellik edik == kullanmamalıymışız .. Bazıları bu görüşü gömüyor adam diyor 1 işlemi neden uzatayım aslında doğru program yavaşlar ama 0 hata için bunu göze almak gerekir @ozgunlu : Hocam sizin dediğiniz equals metodunun bir yararı yok bize denedim çünkü zaten o 2 veriyi karşılaştırıyor gene aynı kapıya çıkıyor yani @unbalanced abimin dediği gibi çıkarma işlemi en sağlı çalışanı bunu öğrendiğim iyi oldu teşekkürler :)

     

    @sLeymN Hocam Long ve long aynı kapıya çıkıyor Long sadece long'un kalıntısı gibi birşey sanırım o yüzden bununla ilgili olacağını sanmıyorum çünkü 2 String değeri de karşılaştırırken düzgün çalışmıyor LeymN

    sLey

    Şimdi şuna bi açıklık getir kafanda, String' ler primitive type değildir JAVA' da. Objedir. 

    Ve yine java' da "==" kıyaslamasını objeler üzerinde yaparsan adreslerini kıyaslar.

    Primitive type' lar arasında değerlerini kıyaslar.

    Objelerin değerlerini kıyaslamak için "equals" kullanılır.

    örnek verecek olursak ;

    double a = 5.0;

    int b = 5;

    if (a == b) -> TRUE

    -----------------------------

    long a = 5;

    int b = 5;

    if (a==b) -> TRUE

    ------------------------------

    String a = "5" -> obje

    int b = 5;

    if (a == b) -> FALSE

    if (a.equals(b)) -> FALSE

    if (Integer.parseInt(a) == b) -> TRUE

    ------------------------------

    String a = "5";

    String b = "5";

    if (a == b) -> FALSE

    if (a.equals(b)) -> TRUE

    -------------------------------

     

    - İlk örnekte ikisi de primitive type' dır ve "==" operator' ü için ikisi de eşittir.

    - İkinci örnekte ikisi de primitive type' dır ve "==" operator' ü için ikisi de eşittir.

    - Üçüncü örnekte String değeri objedir ve "==" operator' ünde objelerin adres değerine bakıldığı için eşit değildir.

    Ayrıca üçüncü örnekte obje ile primitive type kıyaslayamazsın, equals ile. O yüzden yine false döner. Ama sen String' i parse edersen diğer türe göre (parseInt, parseLong, parseDouble vs.) 

    sonra "==" operator' ünü kullanabilirsin ve sonuç true döner.

    - Son örnekte ikisi de obje olduğu için "==" operatorü çalışmayacaktır, equals ise çalışacaktır.

     

    Son söz fantaziye kaçma, gelen değerlerin tiplerine göre birbirlerine parse edersen her zaman doğru değeri alırsın.

    Bu da son örnek;

    String a = "5";

    int b = 5;

    if (String.valueOf(b).equals(a)) -> TRUE


    Hello, i am nothing. I come from Neverland.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    whopper
    whopper's avatar
    Kayıt Tarihi: 26/Haziran/2008
    Erkek
    MhmdAlmz bunu yazdı
    whopper bunu yazdı

    Hacı object oriented olayına alışıp kod yazıyorsun ama == ten doğan sıkıntıyla nasıl ilk defa yeni karşılaşıyorsun onu anlamadım :S  normalde ilk yapılan hatalardan biridir bu.

    Bilmiyorum daha önce hiç karşıma çıkmadı gerçekten :/ genelde Equals ile çözüyordum fakat bu sefer olmadı o yüzden dün Equals da çalışmayınca kafamda birsürü soru işareti oldu .0 gibi gösterse diyeceğim ki .0 olduğu için karşılaştrmada hata oluyor ama öyle bi durumda olmadı çok ileri düzey bi programcı olmadığım için böyle bi durumla ilk defa karşılaştım :/ Yavaş yavaş öğreniyorum böyle basit şeyleri bazen büyüğe oynayınca basitler büyükten daha çok sıkıntı çıkarıyor Şekil A :)

    kolay gelsin reyiz her şey hallolur. 

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    @whopper daha yeni başladım 5. senem yetişmem lazım :/ Umarım hallolur zevkli iş :D

     

    @ozgunlu hocam verdiklerinizi yapmıştım gene aynı sorunu yaşadım galiba bende bi sıkıntı var kodlarda vardı sıkıntı bunu yaparken sanırım örnekleri 5 dk önce tek tek denedim sizin örnekleri hepsi dediğiniz gibi döndü teşekkür ederim açıklama için Dikkat etmek gerekiyor pür dikkat


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek
    MhmdAlmz bunu yazdı

    Dün bu konu üstünde baya bi araştırma yaptım ne kadar basit bir konu olsa bile bazen if-else yazarken hiçbir şekilde kontrole etmezdim çalışıp çalışmadığını çünkü == ibaresi benim için EŞİT se anlamını ifade ediyordu bu gün anladım ki o kadar kolay değil biryerde String ifade karşılaştırırken 0 hata almak için önce string değeri parçalayıp CHAR dizi yaparak yani tek tek ascii kodlarını karşılarştırmak en iyisi Int-double gibi sayısal değerlerde @unbalanced abimin dediği gibi çıkarma işlemi yapmak en mantıklısı çünkü her zaman WebService/Database vs vs dışardan gelen veriler aynı tipte olmuyor. O yüzden == kullanmak biraz saçma imiş zaten ikisinin eşit olmasının sebepleri var ki olmalı yoksa eşitlik kavramı ortada olmaz biz yazılımcılar eşitse gibi ibare kullanmamamız gerekiyor . çünkü en ince ayrıntısına kadar bilmeliyiz çoğu şeyi.. Sayılarla işlemde çıkarma String ifadede ascii karşılaştırma mantıklı olandır . Tembellik edik == kullanmamalıymışız .. Bazıları bu görüşü gömüyor adam diyor 1 işlemi neden uzatayım aslında doğru program yavaşlar ama 0 hata için bunu göze almak gerekir @ozgunlu : Hocam sizin dediğiniz equals metodunun bir yararı yok bize denedim çünkü zaten o 2 veriyi karşılaştırıyor gene aynı kapıya çıkıyor yani @unbalanced abimin dediği gibi çıkarma işlemi en sağlı çalışanı bunu öğrendiğim iyi oldu teşekkürler :)

     

    @sLeymN Hocam Long ve long aynı kapıya çıkıyor Long sadece long'un kalıntısı gibi birşey sanırım o yüzden bununla ilgili olacağını sanmıyorum çünkü 2 String değeri de karşılaştırırken düzgün çalışmıyor LeymN

    sLey

    aslında aynı şey değil hocam

     

    https://docs.oracle.com/javase/7/docs/api/java/lang/Long.html  ---> Class

    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html ---> primitive veri tipi


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.
Toplam Hit: 4325 Toplam Mesaj: 23
yazılım if-else if else