1. การเปรียบเทียบสตริง

ทั้งหมดนี้เป็นสิ่งที่ดีและดี แต่คุณจะเห็นว่าจริง ๆ แล้วสตริงs1และs2สตริงนั้นเหมือนกัน หมายความว่ามีข้อความเดียวกัน เมื่อเปรียบเทียบสตริง คุณจะบอกโปรแกรมอย่างไรไม่ให้ดูที่อยู่ของStringวัตถุ แต่ดูที่เนื้อหา

เพื่อช่วยเราในเรื่องนี้ คลาสของ Java Stringมีequalsเมธอด การเรียกมันมีลักษณะดังนี้:

string1.equals(string2)
การเปรียบเทียบสองสาย

เมธอดนี้จะส่งกลับtrueหากสตริงเหมือนกันและfalseหากไม่เหมือนกัน

ตัวอย่าง:

รหัส บันทึก
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

ตัวอย่างเพิ่มเติม:

รหัส คำอธิบาย
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
true


2. การเปรียบเทียบสตริงที่ไม่คำนึงถึงขนาดตัวพิมพ์

ในตัวอย่างที่แล้ว คุณเห็นว่าการเปรียบเทียบให้ผลตอบแทน แท้จริงแล้วสตริงไม่เท่ากัน แต่..."Hello".equals("HELLO")false

เห็นได้ชัดว่าสตริงไม่เท่ากัน ที่กล่าวว่าเนื้อหาของพวกเขามีตัวอักษรเหมือนกันและแตกต่างกันเฉพาะตัวอักษรเท่านั้น มีวิธีใดที่จะเปรียบเทียบพวกเขาและไม่สนใจตัวพิมพ์เล็ก ๆ น้อย ๆ ? นั่นคือเพื่อให้ผลตอบแทน?"Hello".equals("HELLO")true

และคำตอบสำหรับคำถามนี้คือใช่ ใน Java ชนิดStringมีเมธอดพิเศษอื่น: equalsIgnoreCase. การเรียกมันมีลักษณะดังนี้:

string1.equalsIgnoreCase(string2)

ชื่อของเมธอดแปลประมาณว่าเปรียบเทียบ แต่ไม่สนใจ case ตัวอักษรในชื่อเมธอดมีเส้นแนวตั้งสองเส้น เส้นแรกเป็นตัวพิมพ์เล็กและLเส้นที่สองเป็นตัวพิมพ์ใหญ่ iอย่าปล่อยให้สิ่งนั้นทำให้คุณสับสน

ตัวอย่าง:

รหัส บันทึก
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


3. ตัวอย่างการเปรียบเทียบสตริง

ลองยกตัวอย่างง่ายๆ หนึ่งข้อ: สมมติว่าคุณต้องป้อนสองบรรทัดจากแป้นพิมพ์และตรวจสอบว่าเหมือนกันหรือไม่ นี่คือลักษณะของรหัส:

Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);

4. ความแตกต่างที่น่าสนใจของการเปรียบเทียบสตริง

มีความแตกต่างที่สำคัญประการหนึ่งที่คุณต้องระวัง

หากคอมไพเลอร์ Javaพบสตริงที่เหมือนกันหลายสตริงในโค้ดของคุณ (โดยเฉพาะในโค้ดของคุณ) ก็จะสร้างเพียงออบเจกต์เดียวสำหรับสตริงเหล่านั้นเพื่อประหยัดหน่วยความจำ

String text = "This is a very important message";
String message = "This is a very important message";

และนี่คือสิ่งที่หน่วยความจำจะมีเป็นผลลัพธ์:

การเปรียบเทียบสตริง

และถ้าคุณเปรียบเทียบtext == messageที่นี่ คุณจะtrueได้ ดังนั้นอย่าแปลกใจไป

หากคุณต้องการการอ้างอิงให้แตกต่างด้วยเหตุผลบางประการ คุณสามารถเขียนสิ่งนี้:

String text = "This is a very important message";
String message = new String ("This is a very important message");

หรือสิ่งนี้:

String text = "This is a very important message";
String message = new String (text);

ในทั้งสองกรณีนี้ ตัวแปร textและmessageชี้ไปที่วัตถุต่างๆ ที่มีข้อความเดียวกัน