ความแตกต่างระหว่างค่าเท่ากับและ == ในชวา
ชนิดข้อมูลใน Java สามารถแบ่งออกเป็นสองประเภท:
1. ชนิดข้อมูลพื้นฐานหรือที่เรียกว่าชนิดข้อมูลดั้งเดิม ไบต์, สั้น, ถ่าน, int, ยาว, ลอย, คู่, บูลีน
การเปรียบเทียบระหว่างพวกเขาโดยใช้เครื่องหมายสองเท่า (==) ถูกนำมาเปรียบเทียบกับค่าของพวกเขา
2. ประเภทข้อมูลข้อมูล (คลาส)
เมื่อพวกเขาเปรียบเทียบกับ (==) พวกเขาจะเปรียบเทียบที่อยู่ที่เก็บข้อมูลในหน่วยความจำ ดังนั้นถ้าพวกเขาเป็นวัตถุจากใหม่เดียวกันผลลัพธ์หลังจากการเปรียบเทียบเป็นจริงมิฉะนั้นผลลัพธ์หลังจากการเปรียบเทียบเป็นเท็จ คลาสทั้งหมดใน Java สืบทอดมาจากวัตถุคลาสพื้นฐาน วิธีการเท่ากับถูกกำหนดไว้ในคลาสฐานในวัตถุ พฤติกรรมเริ่มต้นของวิธีนี้คือที่อยู่หน่วยความจำของวัตถุเปรียบเทียบ แต่ในไลบรารีคลาสบางวิธีวิธีนี้ถูกเขียนทับ ตัวอย่างเช่นสตริงจำนวนเต็มและวันที่มีการใช้งานของตัวเองในคลาสเหล่านี้และไม่ได้เป็นที่เก็บข้อมูลของคลาสเปรียบเทียบในหน่วยความจำฮีปอีกต่อไป
สำหรับการเปรียบเทียบเท่ากับชนิดข้อมูลคอมโพสิตโดยไม่ต้องเขียนทับวิธีเท่ากับการเปรียบเทียบของพวกเขาจะขึ้นอยู่กับค่าที่อยู่ของตำแหน่งที่เก็บข้อมูลในหน่วยความจำ เนื่องจากวิธีการเท่ากับของวัตถุก็ถูกนำมาเปรียบเทียบกับเครื่องหมายเท่ากันสองเท่า (==) ดังนั้นผลลัพธ์หลังจากการเปรียบเทียบจึงเหมือนกับผลลัพธ์ของเครื่องหมายเท่ากันสองเท่า (==)
ความแตกต่างระหว่าง Java Equals และ =, ==
1. ความแตกต่างระหว่าง == และเท่ากับ
1. == เป็นตัวดำเนินการ
2. เท่ากับวิธีการของวัตถุสตริง
โดยทั่วไปมีการเปรียบเทียบสองประเภท
1. การเปรียบเทียบชนิดข้อมูลพื้นฐาน
2. การเปรียบเทียบวัตถุอ้างอิง
1. การเปรียบเทียบชนิดข้อมูลพื้นฐาน
== และเท่ากับการเปรียบเทียบว่าค่าเท่ากันถ้าเท่ากันมันเป็นความจริงหรือเป็นเท็จ
2. การเปรียบเทียบวัตถุอ้างอิง
== และเท่ากับทั้งคู่เมื่อเทียบกับที่อยู่ในหน่วยความจำสแต็กเท่ากันหรือไม่ ถ้าเท่าเทียมกันมันเป็นความจริงมิฉะนั้นจะเป็นเท็จ
สังเกต:
1. สตริงเป็นชนิดข้อมูลอ้างอิงพิเศษ == เปรียบเทียบว่าที่อยู่อ้างอิงของวัตถุสตริงเหมือนกันหรือไม่และเท่ากับเปรียบเทียบว่าเนื้อหาในสแต็กสอดคล้องกันหรือไม่
สตริง ss = สตริงใหม่ ("abc"); สตริง sss = สตริงใหม่ ("abc"); if (ss == sss) {system.out.println ("ss == sss เป็นจริง"); } if (Ss.Equals (SSS)) {System.out.println ("SS เท่ากับ SSS เป็นจริง"); -เอาต์พุตคอนโซล:
SS! = SSS
SS เท่ากับ SSS
ระบุว่าที่อยู่หน่วยความจำของ SS และ SS ในสแต็กนั้นแตกต่างกัน แต่เนื้อหาในกองเหมือนกัน
สตริง ss = สตริงใหม่ ("abc");
สตริง ssss = ss;
// ตัดสินว่าที่อยู่อ้างอิงของ SS และ SSS ในสแต็กนั้นเหมือนกันถ้า (SS == SSSS) {System.out.println ("SS == SSSS"); } else {system.out.println ("ss! = ssss"); } // ตัดสินว่าเนื้อหาของ SS และ SSSs ในฮีปนั้นเหมือนกันถ้า (Ss.Equals (SSSS)) {System.out.println ("SS เท่ากับ SSSS"); } else {system.out.println ("SS ไม่เท่ากับ SSSS"); -เอาต์พุตคอนโซล:
SS == SSSS
SS เท่ากับ SSSS
นี่แสดงให้เห็นว่า SS และ SSS เป็นวัตถุเดียวกันและมีเนื้อหาเดียวกันในกอง
2. การเปรียบเทียบวัตถุอ้างอิง
TestBean OBJ1 = New TestBean (); TestBean OBJ2 = TestBean ใหม่ (); TestBean OBJ3 = OBJ1; if (obj1 == obj2) {system.out.println ("obj1 == obj2"); } else {system.out.println ("obj1! = obj2"); } if (obj1 == obj3) {system.out.println ("obj1 == obj3"); } else {system.out.println ("obj1! = obj3"); -เอาต์พุตคอนโซล:
obj1! = obj2
obj1 == obj3
หมายความว่า OBJ1 และ OBJ2 ไม่ใช่วัตถุเดียวกันและที่อยู่อ้างอิงในสแต็กนั้นแตกต่างกัน
OBJ1 และ OBJ3 เป็นวัตถุเดียวกันและที่อยู่อ้างอิงในสแต็กก็เหมือนกัน
2. ความแตกต่างระหว่าง = และเท่ากับ ==
= แสดงถึงการกำหนดนั่นคือกำหนดค่าทางด้านขวาของ = ไปยังตัวแปรทางด้านซ้าย เท่ากับและ == เป็นการดำเนินการ
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!