9 Şubat 2021 Salı

Java Sürprizleri

Merhabalar. Java kodlarken hiç ummadığınız hatalarla saatler harcadığınız sizin de olmuştur. Onca tecrübenize rağmen Java dilinin geliştiricilerinin size hazırladığı sürprizlerle karşılaşırsınız ara sıra. Bu yazımda karşılaştığım sıradışı Java özelliklerinden bahsedeceğim.

 


File exist() Metodu Aynı Dosya İçin Linux ve Windows'da Farklı Sonuç Dönebilir

Elimizde ADANA.JPG isimli bir dosya olsun. Kodumuzun bir yerinde 

        File memleket = new File("adana.jpg");

        System.out.println("memleket exist() " + memleket.exists());

satırları bulunsun. Sizce konsola ne yazacaktır? Linux oramında iseniz false Windows ortamında iseniz true yazacaktır. exist() metodu dosyanın olup olmadığının cevabını işletim sistemine sorarak dönmektedir. Windows ise dosya adlarının harflerinin büyük ya da küçük olmasıyla ilgilenmeden cevap dönerken Linux sistemler kesinlikle aynı büyük küçük harflere sahip dosya olup olmadığına bakmaktadır.

 PriorityQueue İteratörü Sıralı Dönmek Zorunda Değil

 PriorityQueue<SinavSonucu> sinavSonuclari = new PriorityQueue<>(); 

şeklinde bir PriorityQueue nesnemiz olsun. PriorityQueue nesnesi genelde hep içindeki elemanların en önceliklisini alıp aynı zamanda queue içinden silinmesi ile sonuçlanan poll() metodu ile kullanılır. Queue içindeki nesneleri silmeden dolaşmak istediğimizde de diğer Collection nesnelerinde olduğu gibi iteratorünü kullanarak dolaşırız.

        for(SinavSonucu sonuc : sinavSonuclari){

            // ....

        

Fakat burada dikkat etmemiz gereken bir nokta var. İçgüdüsel olarak bu for içinde de elemanları öncelik sırasına göre dolaşacağımızı varsayabiliriz. Fakat bu doğru değil. PriorityQueue nesnelerinin iterator() metodu içindeki nesneleri poll() metodunda olduğu gibi öncelik sırasına göre vermeyi garanti etmiyor.

 

Double.MIN_VALUE Sıfırdan Büyüktür

Java'da nümerik değerlerin MAX ve MİN değerlerine ulaşmamız gereken durumlar olabilir. Mesela, Integer.MAX_VALUE, Integer.MIN_VALUE, veya konumuz olan Double.MIN_VALUE. Sizce aşağıdaki kodun konsol çıktısı ne olacaktır?

        System.out.println(Double.MIN_VALUE); 

        if(Double.MIN_VALUE > 0) {
           System.out.println("Hakkaten sıfırdan byükmüş");
        }
        

        System.out.println(Integer.MIN_VALUE);
        

        if(Integer.MIN_VALUE > 0) {
                  System.out.println("integer min value sıfırdan büyük"); 

        }

> 4.9E-324
Hakkaten sıfırdan byükmüş
-2147483648

Integer.MIN_VALUE negatif en küçük integer değeri verirken Double.MIN_VALUE ise negatif en küçük double değeri yerine sıfırdan büyük en küçük Double değerini veriyor. Dikkat etmek lazım.



Hiç yorum yok:

Yorum Gönderme

JTS CBS Kütüphanesi Rehberi 1 - Geometri Modeli

Merhabalar. 2019 yılı başından beri işimde bir CBS (coğrafi bilgi sistemi) ürünü üzerinde çalışıyorum. Java dünyasında harita üzerinde geli...