مقایسه رشتهها
مقایسه صحیح رشتهها با equals و خطر عملگر ==.
چرا == برای رشتهها خطرناک است؟
عملگر == برای رشتهها آدرس حافظه را مقایسه میکند نه محتوا را!
String a = "Java";
String b = "Java";
String c = new String("Java");
System.out.println(a == b); ← true (اشتراک در pool — شانس!)
System.out.println(a == c); ← false (آدرس متفاوت!)
System.out.println(a.equals(c)); ← true (محتوا برابر) ✓
همیشه برای مقایسه محتوای رشتهها از
equals() استفاده کنید — == رفتار غیرقابل پیشبینی دارد!متدهای مقایسه
| متد | کاربرد | مثال | نتیجه |
|---|---|---|---|
equals(x) | مساوی دقیق | "Java".equals("Java") | true |
equalsIgnoreCase(x) | مساوی بدون حساسیت | "Java".equalsIgnoreCase("JAVA") | true |
compareTo(x) | مقایسه ترتیبی | "a".compareTo("b") | < 0 |
equals — مقایسه محتوا
String pass1 = "secret";
String pass2 = "Secret";
System.out.println(pass1.equals("secret")); ← true
System.out.println(pass1.equals(pass2)); ← false (حساس به حروف)
System.out.println(pass1.equalsIgnoreCase(pass2)); ← true ✓
compareTo — مقایسه ترتیبی
برای مرتبسازی الفبایی:
// منفی = اولی قبل از دومی
// صفر = برابر
// مثبت = اولی بعد از دومی
System.out.println("apple".compareTo("banana")); ← منفی
System.out.println("apple".compareTo("apple")); ← 0
System.out.println("banana".compareTo("apple")); ← مثبت
مثال عملی: بررسی رمز عبور
String input = "Java123";
String correct = "Java123";
if (input.equals(correct)) {
System.out.println("ورود موفق!");
} else {
System.out.println("رمز اشتباه!");
}
بررسی خالی بودن
String s = "";
System.out.println(s.isEmpty()); ← true
System.out.println(s.length() == 0); ← true (همان معنا)
System.out.println(" ".isEmpty()); ← false (فاصله = کاراکتر!)
String trimmed = " ".trim();
System.out.println(trimmed.isEmpty()); ← true
این مبحث بخشی از دوره آموزش کامل جاوا است.