บทนำ
ในบทความนี้ เราจะเรียนรู้ความแตกต่างระหว่างตัวดำเนินการ == (equal to) และเมธอด equals() ใน Java สำหรับการเปรียบเทียบสตริง
ตัวดำเนินการ == ตรวจสอบว่าค่าของอเปอранด์สองตัวเท่ากันหรือไม่ (สำหรับออบเจ็กต์ = เปรียบเทียบ reference/ที่อยู่ในหน่วยความจำ) หากใช่ เงื่อนไขจะเป็น true
เมธอด equals() เปรียบเทียบสตริงนี้กับออบเจ็กต์ที่ระบุ ผลลัพธ์เป็น true ก็ต่อเมื่ออาร์กิวเมนต์ไม่ใช่ null และเป็นออบเจ็กต์ String ที่แทนลำดับตัวอักษรเดียวกันกับออบเจ็กต์นี้
ตัวอย่างการทำงาน
อินพุทตัวอย่าง:
The first string : abcde The second string: 12345
เอาต์พุทที่คาดหวัง:
Using == operator to compare the two strings: false Using equals() to compare the two strings: false
อัลกอริทึม
ขั้นตอนที่ 1 - เริ่มต้น ขั้นตอนที่ 2 - ประกาศสตริงสองตัว: input_string_1, input_string_2 และบูลีนสองตัว: result_1, result_2 ขั้นตอนที่ 3 - กำหนดค่า ขั้นตอนที่ 4 - เปรียบเทียบสตริงสองตัวด้วย == operator กำหนดผลให้ result_1 ขั้นตอนที่ 5 - เปรียบเทียบสตริงสองตัวด้วย equals() กำหนดผลให้ result_2 ขั้นตอนที่ 6 - แสดงผลลัพธ์ ขั้นตอนที่ 7 - จบการทำงาน
ตัวอย่างที่ 1: เขียนในฟังก์ชัน main โดยตรง
public class Compare {
public static void main(String[] args) {
String input_string_1 = new String("abcde");
System.out.println("The first string is defined as: " + input_string_1);
String input_string_2 = new String("12345");
System.out.println("The second string is defined as: " + input_string_2);
boolean result_1 = (input_string_1 == input_string_2);
System.out.println("\nUsing == operator to compare the two strings: " + result_1);
boolean result_2 = input_string_1.equals(input_string_2);
System.out.println("Using equals() to compare the two strings: " + result_2);
}
}
เอาต์พุท
The first string is defined as: abcde The second string is defined as: 12345 Using == operator to compare the two strings: false Using equals() to compare the two strings: false
ตัวอย่างที่ 2: ใช้เมธอดแยก (Object-Oriented Style)
public class Demo {
static void compare(String input_string_1, String input_string_2) {
boolean result_1 = (input_string_1 == input_string_2);
System.out.println("\nUsing == operator to compare the two strings: " + result_1);
boolean result_2 = input_string_1.equals(input_string_2);
System.out.println("Using equals() to compare the two strings: " + result_2);
}
public static void main(String[] args) {
String input_string_1 = new String("abcde");
System.out.println("The first string is defined as: " + input_string_1);
String input_string_2 = new String("12345");
System.out.println("The second string is defined as: " + input_string_2);
compare(input_string_1, input_string_2);
}
}
เอาต์พุท
The first string is defined as: abcde The second string is defined as: 12345 Using == operator to compare the two strings: false Using equals() to compare the two strings: false
สรุปความแตกต่างสำคัญ:
| 측면 | == (Reference Equality) | equals() (Content Equality) |
|---|---|---|
| เปรียบเทียบ | ที่อยู่หน่วยความจำ (Reference) | เนื้อหาตัวอักษร (Content) |
| สตริงลิเทอรัล ("abc") | true (String Pool) | true |
| new String("abc") | false (ออบเจ็กต์ต่างกัน) | true |
| แนวทางปฏิบัติที่ดี | ไม่ควรใช้เปรียบเทียบสตริง | ใช้เสมอสำหรับเปรียบเทียบสตริง |