مقایسه رشته‌ها

مقایسه صحیح رشته‌ها با 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

این مبحث بخشی از دوره آموزش کامل جاوا است.

ابزارهای مرتبط