Java Puzzle 17 – Byte’s Bound

Merhaba Arkadaslar
Ornek kodumuzu hemen inceleyelim ;

package _17.byte$.inloop;

public class Bounds {

	public static void main(String[] args) {
		for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++) {
			if (b == 0x90)
				System.out.print("if!");
		}
	}
}

Ornegimizi calistirdigimizda output ne olacak ?
90’a geldiginde bir kere if’e girecek ve “if!” yazacak olarak dusunebiliriz.
Fakat dikkatli bakacak olursak sayimiz 90 degil 0x90 dir!
Java’da integer/tamsayi literalleri varsayilan olarak decimal/onluk tur fakat Java’da bir sayi 0x ya da 0X ile basliyorsa bunun anlami bu sayi hexadecimal formattadir.

0x90 -> 10 luk tabanda 144 e esittir.
Ee peki neden loop 144’e geldiginde if’e girmedi ? Cunku dongu 144’e gelemez !
Cunku byte veri tipi 8 bittir , [- 2 27-1]  yani [-128 127] araliginda deger alabilir
144 bu sinir disindadir.

Byte.MIN_VALUE ve Byte.MAX_VALUE degerlerini yazdirabiliriz.

    System.out.println(Byte.MIN_VALUE);
    System.out.println(Byte.MAX_VALUE);

Burada byte tipiyle int veri tipini karsilastiriyoruz , bu tip mixed type comparison durumlari her zaman risklidir ve hataya elverislidir.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *