ในการเปรียบเทียบ Strings เพื่อความเท่าเทียมกัน คุณควรใช้ equals
ของวัตถุ String หรือ equalsIgnoreCase
วิธีการ เราจะเห็นด้วยว่าทำไมเราจึงไม่ควรใช้ ==
ตัวดำเนินการเพื่อเปรียบเทียบสตริง
การเปรียบเทียบสตริงกับวิธีเท่ากับ ()
หากเราต้องการเปรียบเทียบสองสตริงใน java และสนใจเกี่ยวกับตัวพิมพ์ของสตริง เราสามารถใช้ equals()
วิธีการ
ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้จะกำหนดว่าสตริงสองอินสแตนซ์เท่ากันกับอักขระทั้งหมดรวมทั้งตัวพิมพ์เล็กหรือไม่:
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = "Test123";
String secondString = "Test" + 123;
String thirdString = "TEST123";
if (firstString.equals(secondString)) {
System.out.println("first and second strings are equal");
}
if (firstString.equals(thirdString)) {
System.out.println("first and third string are equal");
}
}
}
เอาท์พุต:
first and second strings are equal
หมายเหตุ:คำสั่งพิมพ์ที่สองไม่ได้รับการดำเนินการเนื่องจากตัวพิมพ์ของ firstString และ thirdString ไม่ตรงกัน การเปรียบเทียบสตริงกับวิธี equalsIgnoreCase()
หากเราต้องการเปรียบเทียบสองสตริงใน java แต่ไม่สนใจเกี่ยวกับตัวพิมพ์ของสตริง เราสามารถใช้ equalsIgnoreCase()
วิธีการ
ตัวอย่างเช่น ในข้อมูลโค้ดข้างต้น หากเราแทนที่ .equals()
ด้วย .equalsIgnoreCase()
เมธอด จากนั้นสั่งพิมพ์ทั้งสองคำสั่ง:
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = "Test123";
String secondString = "Test" + 123;
String thirdString = "TEST123";
if (firstString.equalsIgnoreCase(secondString)) {
System.out.println("first and second strings are equal");
}
if (firstString.equalsIgnoreCase(thirdString)) {
System.out.println("first and third string are equal");
}
}
}
เอาท์พุต:
first and second strings are equal
first and third string are equal
ที่เกี่ยวข้อง:
- เหตุใดจึงแทนที่ toString() ใน Java
- วิธีย้อนกลับสตริงใน Java
- วิธีดึงตัวเลขออกจากสตริง
- วิธีการแปลงสตริงเป็น Int ใน Java
อย่าใช้ตัวดำเนินการ ==เพื่อเปรียบเทียบสตริง
หมายเหตุ:เมื่อเปรียบเทียบสองสตริงใน java เราไม่ควรใช้ == หรือ != ผู้ประกอบการโอเปอเรเตอร์เหล่านี้ทดสอบการอ้างอิงจริง ๆ และเนื่องจากออบเจ็กต์ String หลายตัวสามารถเป็นตัวแทนของ String เดียวกันได้ การดำเนินการนี้จึงอาจให้คำตอบที่ผิดได้
ให้ใช้ String.equals(Object)
. แทน เมธอด ซึ่งจะเปรียบเทียบออบเจ็กต์ String ตามค่าของวัตถุ
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = "Test123";
String secondString = "Test123";
String thirdString = new String("Test123");
if (firstString == secondString) {
System.out.println("first and second strings are equal");
}
if (firstString == thirdString) {
System.out.println("first and third strings are equal");
}
}
}
เอาท์พุต:
first and second strings are equal
หมายเหตุ:คำสั่งการพิมพ์ที่สองจะไม่ถูกดำเนินการ การเปรียบเทียบสตริงกับค่าคงที่
เมื่อเปรียบเทียบสตริงกับค่าคงที่ คุณสามารถใส่ค่าคงที่ทางด้านซ้ายของเท่ากับ เพื่อให้แน่ใจว่าคุณจะไม่ได้รับ NullPointerException
ถ้าสตริงอื่นเป็นโมฆะ
ตัวอย่างเช่น:
"baz".equals(foo)
ขณะที่ foo.equals("baz")
จะโยน NullPointerException
ถ้า foo เป็นโมฆะ "baz".equals(foo)
จะประเมินเป็น false
.
ทางเลือกอื่นที่อ่านง่ายกว่าคือการใช้ Objects.equals()
ซึ่งทำการตรวจสอบค่าว่างทั้งสองพารามิเตอร์:
เช่น. Objects.equals(foo, "baz")
.
การเปรียบเทียบสตริงในคำสั่งสวิตช์
สำหรับ Java 1.7 เป็นไปได้ที่จะเปรียบเทียบตัวแปร String กับตัวอักษรในคำสั่ง switch ตรวจสอบให้แน่ใจว่าสตริงไม่เป็นค่าว่าง มิฉะนั้นจะโยน NullPointerException
. ค่าจะถูกเปรียบเทียบโดยใช้ String.equals
, เช่น.
public class CompareTwoStrings {
public static void main(String[] args) {
String stringToSwitch = "A";
switch (stringToSwitch) {
case "a":
System.out.println("a");
break;
case "A":
System.out.println("A"); //the code goes here
break;
case "B":
System.out.println("B");
break;
default:
break;
}
}
}
บทสรุป
ในโพสต์นี้ เราได้อธิบายวิธีเปรียบเทียบสตริงในจาวากับตัวอย่างโค้ด เมื่อตัวพิมพ์ของสตริงมีความสำคัญ เราควรใช้ .equals()
และเมื่อปลอกไม่สำคัญ เราก็ควรใช้ .equalsIgnoreCase()
.
นอกจากนี้ เราไม่ควรใช้ ==
ตัวดำเนินการเปรียบเทียบสตริง เช่น ==
ตัวดำเนินการตรวจสอบการอ้างอิงไม่ใช่ค่า