چگونه میتوان رشتهها را در جاوا مقایسه کرد؟
== برای تست کردن برابری مرجع به کار میرود. (خواه آنها یک شی باشند).
.equals () برابری مقدار را تست میکند (خواه از نظر منطقی "برابر" باشند).
Objects.equals () قبل از فراخوانی، .equals() را برای null بررسی میکند.
در نتیجه، اگر می خواهید تست کنید که آیا دو رشته دارای مقدار یکسانی هستند یا خیر، بهتر است که از Objects.equals (). استفاده کتید.
// These two have the same value
new String("test").equals("test") // --> true
// ... but they are not the same object
new String("test") == "test" // --> false
// ... neither are these
new String("test") == new String("test") // --> false
// ... but these are because literals are interned by
// the compiler and thus refer to the same object
"test" == "test" // --> true
// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true
// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true
در بیشتر مواقع بهتر است از Objects.equals (). اما در شرایط نادری که می دانید با رشتههای داخلی سروکار دارید، میتوانید از == استفاده کنید.
بهتر است بدانید که . . .
String.equalsIgnoreCase() حروف کوچک و بزرگ را نادیده می گیرد و وقتی تفاوت دو مقدار فقط در حروف کوچک و بزرگ باشد با خطا مواجه میشوید. همچنین مراقب باشید که این روش ممکن است نتایج غیرمنتظرهای در موارد مختلف مرتبط زبانهای غیر انگلیسی داشته باشد.
String.contentEquals () محتوای String را با محتوای هر CharSequence (در جاوا 1.5 به بعد) مقایسه میکند که شما را از تبدیل StringBuffer و غیره به رشته قبل از انجام مقایسه نجات میدهد، اما بررسی null را به شما واگذار میکند.