Sponsor Reklam 


04.02.2009 (05:05)

 String'lerde Karşılaştırma İşlemleri 
Sayısal değerlere göre string'lerde karşılaştırmada bazı farklılıklar yer almaktadır.

// integer karşılaştırma
int a = 5;
int b = 6;
if (a == b) {
  // işlemler
}

// String karşılaştırma
String str1 = "merhaba";
String str2 = "merhaba";
String str3 = new String(str1);
if (str1 == str2) {
  // 1. if ifadesi
}
if (str1 == str3) {
  // 2. if ifadesi
}

Burada da görüleceği üzere tamsayılar arası doğrudan karşılaştırma yapabiliyoruz. Fakat str1 ve str2 arası karşılaştırma True sonucunu verirken ikinci if karşılaştırması için False sonucunu verecektir. Bunun nedeni ise yapılan karşılaştırmaların stringlerin tuttuğu değerler arasında değil de bu değişkenlerin referans adreslerinin karşılaştırılmasındandır. Ne de olsa Java'da string'ler String sınıfının nesneleridir ve referansları yer almaktadır.

Şöyle de düşünebiliriz. "merhaba" değeri bir string olup kendi başına bir referansı da mevcuttur. str1 ve str2 değişkenlerine yapılan atamalarda, atama öncesi str1 ve str2'nin referans adresleri farklı iken atama sonrası aynı referansa sahip olmuşlardır. Yani değişiklik bu stringlerin referans adreslerinde olmuştur. Oysa, str3'ün oluşturulmasında str1 kullanılarak yeni bir referans adresi oluşmuştur. Yani str3, str1 ile aynı yeri işaret eden değişkenler değil, birbirlerinin kopyaları olan farklı yerleri işaret eden değişkenlerdır.

Peki stringlerin karşılaştırılmasında gerek duyduğumuz içeriğin karşılaştırılmasını nasıl yapacağız? Bunun için javada equals() metodu tanımlanmış. Eğer iki stringin içeriği birbirine eşit ise sonucu true, değilse false olarak veren bu metot stringlerin büyük-küçük harfine karşı da duyarlı. Eğer büyük-küçük harflere karşı duyarlı olmadan karşılaştırma yapacaksak equalsIgnoreCase() metodunu kullanabiliriz.

Şimdi == yerine equals() metodunu kullanalım:

if (str1.equals(str2)) {
  // 3. if ifadesi
}

Bu ifade true değer alacaktır.

String karşılaştırması için kullanabileceğimiz bir başka yöntem de compareTo() metodudur. Yine benzer olarak büyük-küçük harf duyarlılığı istemiyorsak compareToIgnoreCase() metodunu kullanabiliriz. Bu metot, stringler arası yapılan karşılaştırma sonucunda eşitlik varsa "0" değerini döndürecektir. Karakterlerin ASCII değerleri düşünülerek yapılan karşılaştırmada ilk gelen, küçük string, sonra gelen büyük string olarak düşünülmektedir. Yani sözlüksel olarak düşünürsek daha önce yer alan sözcük diğerine göre küçüktür diyebiliriz. Yapılan karşılaştırmada ilk sözcük küçükse sonuç "negatif", büyükse "pozitif" olarak döndürülecektir.

"kodcu", "net", "java", "javA", "Yazı", "1234" stringlerini küçükten büyüğe sıralarsak şöyle bir sıralama oluşacaktır:

1234
Yazı
javA
java
kodcu
net

İlk karakterden itibaren karakterlerin ascii değerleri karşılaştırılırsa ve değerler küçükten büyüğe sıralanırsa böyle bir sıralamaya ulaşılacaktır.
Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter