Java, dizeleri karşılaştırmak için her birinin kendine özgü güçlü ve zayıf yönleri olan çeşitli yöntemler sunar. En iyi yöntem, büyük/küçük harfe duyarlı bir karşılaştırmaya mı ihtiyacınız olduğuna, eşitliği mi kontrol ettiğinize yoksa alfabetik sırayı mı belirlemeniz gerektiğine bağlıdır. Bu kılavuz, en yaygın yaklaşımları açıklığa kavuşturmaktadır.
İçindekiler
compareTo()
Metodunun Kullanımı==
Operatörüequals()
Metodu- Büyük/Küçük Harf Duyarlılığı ve
equalsIgnoreCase()
contentEquals()
Metodu
1. compareTo()
ile Dizeleri Karşılaştırma
compareTo()
metodu, alfabetik bir karşılaştırma sunar. Şunları döndürür:
0
: Dizeler eşitse.- Negatif bir değer: Çağrılan dize, argüman dizisinden alfabetik olarak önce geliyorsa.
- Pozitif bir değer: Çağrılan dize, argüman dizisinden alfabetik olarak sonra geliyorsa.
Bu karşılaştırma büyük/küçük harfe duyarlıdır; büyük harfler küçük harflerden önce gelir.
String str1 = "apple";
String str2 = "banana";
String str3 = "Apple";
int result1 = str1.compareTo(str2); // result1 negatif olacaktır
int result2 = str1.compareTo(str3); // result2 negatif olacaktır (büyük/küçük harfe duyarlı)
int result3 = str1.compareTo("apple"); // result3 0 olacaktır
2. ==
Operatörü
==
operatörü, dize içeriğini değil, referansları karşılaştırır. İki dize değişkeninin aynı bellek konumunu işaret edip etmediğini kontrol eder. Bu, genellikle dize değerlerini karşılaştırmak için istenen davranış değildir.
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // Java'nın dize birleştirme özelliği nedeniyle genellikle doğru
System.out.println(str1 == str3); // yanlış (farklı nesneler)
str1 == str2
, Java’nın dize birleştirme özelliği nedeniyle genellikle true
döndürse de, buna güvenmek güvenilir değildir. Her zaman içerik karşılaştırma için equals()
kullanın.
3. equals()
Metodu
equals()
metodu, dize içeriğini karşılaştırmak için önerilen yaklaşımdır. Bellek konumlarını dikkate almadan karakterleri karşılaştırır.
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1.equals(str2)); // doğru
System.out.println(str1.equals(str3)); // doğru
4. Büyük/Küçük Harf Duyarlılığı ve equalsIgnoreCase()
equals()
büyük/küçük harfe duyarlıdır. “hello” ve “Hello” farklı olarak kabul edilir. Büyük/küçük harfe duyarsız karşılaştırma için equalsIgnoreCase()
kullanın.
String str1 = "hello";
String str2 = "Hello";
System.out.println(str1.equals(str2)); // yanlış
System.out.println(str1.equalsIgnoreCase(str2)); // doğru
5. contentEquals()
Metodu
contentEquals()
, equals()
‘a benzer, ancak bir String’i diğer CharSequence
nesneleriyle (StringBuffer
veya StringBuilder
gibi) karşılaştırmaya olanak tanır.
String str1 = "hello";
StringBuffer str2 = new StringBuffer("hello");
System.out.println(str1.contentEquals(str2)); // doğru
Bu esneklik sunar, ancak basit dize-dize karşılaştırmaları için, okunabilirlik için equals()
tercih edilir.
Özetle, ihtiyacınıza göre uygun yöntemi seçin: alfabetik sıra için compareTo()
, büyük/küçük harfe duyarlı içerik eşitliği için equals()
, büyük/küçük harfe duyarsız eşitlik için equalsIgnoreCase()
ve dizeleri diğer CharSequence
nesneleriyle karşılaştırmak için contentEquals()
. Dize içeriğini karşılaştırmak için ==
kullanmaktan kaçının.