Java Puzzle 10 – The Last Laugh

Merhaba arkadaslar,
Character bazli puzzle’lar bolumune basliyoruz.
Ornegimizi inceleyelim ;

HaHa.java

package _10.last.laught;

public class HaHa {
	public static void main(String args[]) {
		System.out.print("H" + "a");
		System.out.print('H' + 'a');
	}
}

Ornegimizi calistirdigimizda ;
Program calistiginda Ha169 yazacaktir. Peki neden ?

Birinci System.out.print bekledigimiz gibi Ha yazacaktir.
“H”+”a” ifadesinde String Concanetation(birlestirme) islemi yapilacaktir.

Ikinci System.out.print ifadesi ise durum farklidir. ‘H’ ve ‘a’ degerleri Char literalidir.
char veri tipi 16 bit unsigned’tir. unsigned/isaretsiz demektir yani negatif deger alamaz
0-65535 araliginda deger alabilir.

‘H’ –> 72
‘a’ –> 97

dolayisiyla ‘H’+’a’ ifadesi 169 degerine sahip olacaktir.
http://unicode-table.com/en/

Peki char literallerini nasil birlestirebiliriz ?
StringBuffer veya StringBuilder ile yapabiliriz.

StringBufferTest.java

package _10.last.laught;

public class StringBufferTest {
	public static void main(String[] args) {

		StringBuffer sb = new StringBuffer();
		sb.append('H');
		sb.append('a');
		System.out.println(sb);
		
	}

}

Ya da Concatenation ifadesinin basinda “” kullaniriz;

System.out.print("" + 'H' + 'a');

Peki su ifadenin sonucu ne olur ;

System.out.println("2 + 2 = " + 2+2);

Burada String ifadesi sonrasinda 2+2 degeri 4 olarak toplanmayacaktir bunun yerine String Concatenation ‘a tabii tutularak “22” degerine sahip olacaktir.

Bir baska yaklasim olarak Java 5.0 ile eklenen printf yapisi ile de yapabiliriz;

System.out.printf("%c%c", 'H', 'a');

+ operatorunu kullanirken dikkatli olmamiz gerekir. + operatorunde operandlardan birisi String ise String Concatenation gerceklesir. Eger en az birtane String operand yoksa ve String Concatenation yapmak istiyorsak ya bos “” kullanabiliriz , StringBuffer , StringBuilder sinifini kullanabiliriz ya da printf metodunu kullanabiliriz.

Javadaki operator overloading yapisi String Concatenation yaparken ortaya cikar.

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 *