Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java เปรียบเทียบ == กับ equals() สำหรับสตริง


บทนำ

ในบทความนี้ เราจะเรียนรู้ความแตกต่างระหว่างตัวดำเนินการ == (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
แนวทางปฏิบัติที่ดีไม่ควรใช้เปรียบเทียบสตริงใช้เสมอสำหรับเปรียบเทียบสตริง