การเปรียบเทียบระหว่างเท่ากับและ == คืออะไร?
1. Boolean TEM = A == B;
ก่อนอื่น == การเปรียบเทียบเป็นที่อยู่อย่างแน่นอน จากมุมมองของสแต็กนั่นคือ == การเปรียบเทียบคือเนื้อหาในสแต็ก เนื่องจากสแต็กใช้ในการจัดเก็บค่าตามตัวอักษรของตัวแปรอัตโนมัติในแปดประเภทพื้นฐานใน Java (ตัวแปรอัตโนมัติเป็นตัวแปรที่กำหนดไว้ในรูปแบบของ int a = 1;) หากเป็นค่าการเปรียบเทียบตัวแปรอัตโนมัติมันจะถูกใช้อย่างแน่นอนเพื่อเปรียบเทียบกับ == เพราะ Equals () เป็นวิธีการดังนั้นจึงต้องเรียกโดยวัตถุที่จะใช้สำหรับการเปรียบเทียบ ตัวแปรอัตโนมัติไม่ใช่อินสแตนซ์ของคลาสหรือการอ้างอิงของคลาสดังนั้นวิธี Equals () ไม่สามารถใช้ได้
2.Boolean TEM = A.Equals ("B");
โดยทั่วไปวิธี Equals () ใช้เพื่อเปรียบเทียบเนื้อหาของวัตถุ แต่ในบางกรณีมันก็เปรียบเทียบที่อยู่ของวัตถุสองชิ้น
ต่อไป
เขียนโปรแกรมทดสอบ
แพ็คเกจ com; นำเข้า java.util.date; การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {จำนวนเต็มจำนวนเต็ม 1 = จำนวนเต็มใหม่ (1); จำนวนเต็มจำนวนเต็ม 2 = จำนวนเต็มใหม่ (1); string str1 = สตริงใหม่ ("123"); string str2 = สตริงใหม่ ("123"); วันที่วันที่ 1 = วันที่ใหม่ (); วันที่วันที่ 2 = วันที่ใหม่ (); double1 = ใหม่ double ("1.0"); double2 = ใหม่สองครั้ง ("1.0"); บูลีน tem1 = บูลีนใหม่ (จริง); บูลีน tem2 = บูลีนใหม่ (จริง); Object Object1 = New Object (); Object Object2 = วัตถุใหม่ (); System.out.println ("---- Object -------"); System.out.println (Object1.equals (Object2)); System.out.println (Object1 == Object2); System.out.println (Object1.equals (Object1)); System.out.println (Object1 == Object1); System.out.println ("-----------"); System.out.println (Tem1.equals (Tem2)); System.out.println (tem1 == tem2); System.out.println ("--- double --------"); System.out.println (double1.equals (double2)); System.out.println (double1 == double2); System.out.println ("---- จำนวนเต็ม -------"); System.out.println (Integer1.equals (Integer2)); System.out.println (Integer1 == Integer2); System.out.println ("-----------"); System.out.println (str1.equals (str2)); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println ("-----------"); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println (date1.equals (date2)); System.out.println (วันที่ 1 == date2); -ผลลัพธ์:
---วัตถุ-----
เท็จ
เท็จ
จริง
จริง
--- บูลีน -----
จริง
เท็จ
---สองเท่า-----
จริง
เท็จ
---จำนวนเต็ม-----
จริง
เท็จ
--- สตริง -----
จริง
เท็จ
---วันที่-----
จริง
เท็จ
ครั้งแรกเมื่อวัตถุสองชิ้นเปรียบเทียบเหมือนกันผลลัพธ์ของ == และ equals () เป็นจริงและเมื่อวัตถุทั้งสองแตกต่างกันพวกมันจะถูกส่งกลับเท็จ ดังนั้นเมื่อ == และเท่ากับการเปรียบเทียบวัตถุพวกเขาเปรียบเทียบที่อยู่ของวัตถุ แต่ในความเป็นจริงสาระสำคัญนั้นเหมือนกัน นี่คือรหัสของวิธี Equals () ในคลาสวัตถุ:
บูลีนสาธารณะเท่ากับ (Object obj) {return (this == obj); -สำหรับบูลีน, double (ลอย), interger (ยิง, ยาว), สตริงและวันที่ฉันยังพบซอร์สโค้ดของพวกเขา ด้านล่างฉันโพสต์รหัสแหล่งที่มาของเมธอด Equals () ในบูลีน, double, double, interger, string และวันที่ ในเวลานี้วิธี Equals () ถูกเขียนใหม่เนื่องจากคลาสเหล่านี้ได้รับการสืบทอดจากคลาสวัตถุ
บูลีน:
บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (OBJ Instanceof Boolean) {ค่าคืนค่า == ((บูลีน) obj) .BooleanValue (); } return false; -สองเท่า:
บูลีนสาธารณะเท่ากับ (Object OBJ) {return (OBJ Instanceof double) && (doubletolongbits (((สองครั้ง) obj) .Value) == doubletolongbits (ค่า)); -Interger:
บูลีนสาธารณะเท่ากับ (Object OBJ) {ถ้า (OBJ Instanceof Integer) {ค่าคืนค่า == ((จำนวนเต็ม) OBJ) .intValue (); } return false; - สตริง:
บูลีนสาธารณะเท่ากับ (Object Anobject) {if (this == anobject) {return true; } if (anobject instring ของสตริง) {string anothertring = (string) anobject; int n = value.length; if (n == anothertring.value.length) {char v1 [] = value; ถ่าน v2 [] = anotherstring.value; int i = 0; ในขณะที่ (n--! = 0) {ถ้า (v1 [i]! = v2 [i]) ส่งคืนเท็จ; i ++; } return true; }} return false; -วันที่:
บูลีนสาธารณะเท่ากับ (Object obj) {return obj instanceof วันที่ && getTime () == ((วันที่) obj) .getTime (); -กล่าวอีกนัยหนึ่งในช่วงเวลาเหล่านี้วิธีการเท่ากับ () ของคลาสวัตถุถูกเขียนใหม่เพื่อเปรียบเทียบเนื้อหาจริงของวัตถุสองวัตถุและไม่มีที่อยู่อีกต่อไป แน่นอนว่าไม่ใช่แค่สิ่งเหล่านี้อย่างแน่นอน นี่เป็นเพียงไม่กี่กรณีทั่วไปที่คลาส Java Native เขียนวิธี Equals () ของคลาสวัตถุ
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!