1. สตริง == และเท่ากับ ()
ในการตัดสินความเท่าเทียมกันของสตริง == ตัดสินว่าที่อยู่เหมือนกันหรือไม่ และเท่ากับ() ตัดสินว่าค่าอักขระเหมือนกันหรือไม่ โดยส่วนใหญ่แล้วผลลัพธ์ของ == และเท่ากับ() จะเหมือนกัน เนื่องจากวัตถุ String อยู่ในโหมดไม่เปลี่ยนรูป หากคุณไม่ได้สร้างวัตถุ String ใหม่อย่างชัดเจน ค่าเริ่มต้นของ Java สำหรับการบันทึกวัตถุ String คือการวางวัตถุ String ที่สร้างขึ้นใหม่ลงในบัฟเฟอร์ จากนั้นกำหนดบัฟเฟอร์ในแต่ละครั้ง ออบเจ็กต์นี้มีอยู่แล้ว หากเป็นเช่นนั้น ออบเจ็กต์ String ที่มีค่าอักขระเดียวกันที่สร้างขึ้นในภายหลังจะชี้ไปยังที่อยู่ซึ่งออบเจ็กต์ค่าอักขระถูกสร้างขึ้นตั้งแต่แรกด้วย กล่าวคือเมื่อค่าของตัวละครเท่ากัน ธรณีวิทยาก็จะเหมือนกันในกรณีส่วนใหญ่. == มีผลเหมือนกับเท่ากับ() อย่างไรก็ตาม เมื่ออ็อบเจ็กต์ถูกสร้างขึ้นโดย str = new String("abc") แทนที่จะกำหนดโดยตรงเป็น str = "abc" หรือหลังจากการประมวลผลการเชื่อมต่อสตริงบางส่วน หรือสร้างผ่านอ็อบเจ็กต์ เช่น StringBuffer อันใหม่จะถูกเปิดใน หน่วยความจำ สำหรับที่อยู่ ผลลัพธ์ของ == และเท่ากับ() จะแตกต่างกันในขณะนี้
มันซับซ้อนนิดหน่อยเหรอ? ที่นี่คุณต้องมีความเข้าใจเกี่ยวกับหน่วยความจำ สแตก และพื้นที่จัดเก็บอ็อบเจ็กต์ ฉันไม่ต้องการที่จะอยู่ในปัญหานี้ หากคุณไม่เข้าใจเพียงจำไว้ว่าหากคุณต้องการตรวจสอบว่าค่าอักขระของสองสตริงเท่ากันหรือไม่และไม่มีข้อกำหนดอื่น ๆ โปรดใช้เท่ากับ() แทน == ส่วนเมื่อคุณต้องการใช้ == ฉันคิดว่าเมื่อคุณต้องการมันคุณจะเข้าใจมันอย่างเป็นธรรมชาติ จริงๆ แล้ว ในการตัดสินสตริง เราแทบไม่จำเป็นต้องใช้ ==
2. เกี่ยวกับ str.equal("abc") และ "abc".equal(str)
ดูเหมือนว่าจะมีการถกเถียงกันมากมายเกี่ยวกับเรื่องนี้ การเขียนค่าคงที่แรกในตอนท้ายอาจสอดคล้องกับนิสัยของคนส่วนใหญ่และการคิดเชิงตรรกะของเรา แต่จำเป็นต้องมีการตัดสินอีกครั้งหนึ่งเพื่อพิจารณาว่า str เป็นโมฆะหรือไม่ มิฉะนั้น อาจมีข้อยกเว้นเกิดขึ้นที่นี่ วิธีเขียนแบบหลังไม่จำเป็นต้องมีการตัดสินเพิ่มเติมว่าจะเป็นโมฆะหรือไม่ สำหรับความชอบส่วนตัวของฉัน ฉันชอบวิธีเขียนแบบหลังมากกว่า
3. เกี่ยวกับค่าว่างของสตริง
-
* ทดสอบสถานการณ์เมื่อ String ของ Java เป็นโมฆะ
* สร้างวันที่:2009-6-3
* ผู้เขียน:ผู้ดูแลระบบ
-
-
โมฆะคงสาธารณะ testNull(){
สตริง a= null,b = null,c="อิอิ";
System.out.println(a == null);
System.out.println(a+b+c);
-
ผลการดำเนินการตามวิธีการ:
จริง
nullnull ฮ่าๆ ดังนั้นทุกคนควรให้ความสนใจเมื่อทำการรวมสตริง อย่าลืมตรวจสอบ null ไม่เช่นนั้นผลลัพธ์จะไม่น่าพอใจมากนัก!