Java "เท่ากับ" และ "==" ความคล้ายคลึงกัน
ก่อนอื่นมาพูดคุยสั้น ๆ เกี่ยวกับ“ เท่ากัน” และ“ ==”
== การดำเนินการเปรียบเทียบว่าค่าของตัวแปรทั้งสองมีค่าเท่ากันสำหรับชนิดข้อมูลพื้นฐานหรือไม่
สำหรับตัวแปรอ้างอิงหมายความว่าที่อยู่ที่เก็บไว้ในกองเหมือนกันหรือไม่
เนื้อหาในสแต็กเหมือนกันหรือไม่?
ไม่ว่าตัวแปรสองตัวที่แสดงโดยการดำเนินการเท่ากับการอ้างอิงไปยังวัตถุเดียวกันหรือไม่
นั่นคือไม่ว่าเนื้อหาในกองจะเหมือนกันหรือไม่
โดยสรุป == เปรียบเทียบที่อยู่ของ 2 วัตถุในขณะที่เท่ากับเปรียบเทียบเนื้อหาของ 2 วัตถุ
ให้ฉันแนะนำคลาสสตริงสั้น ๆ
คลาสสตริงเรียกอีกอย่างว่าลำดับอักขระที่เปลี่ยนไม่ได้
สตริงใช้ค่าถ่านสุดท้ายส่วนตัว [] เพื่อรับรู้ถึงการจัดเก็บสตริง กล่าวคือหลังจากสร้างวัตถุสตริงเนื้อหาสตริงที่เก็บไว้ในวัตถุนี้ไม่สามารถแก้ไขได้ คลาสสตริงมีวิธีการสร้างพิเศษซึ่งจะใช้คำพูด "" สองเท่าเพื่อสร้าง ตัวอย่างเช่นสตริงใหม่ ("123") จริง ๆ แล้วสร้างวัตถุสตริง 2 ชิ้นนั้นถูกสร้างขึ้นโดย "123" ถึง "" คำพูดสองครั้งและอีกอันหนึ่งถูกสร้างขึ้นโดยใหม่ อย่างไรก็ตามช่วงเวลาที่พวกเขาสร้างนั้นแตกต่างกันหนึ่งคือระยะเวลาการรวบรวมและอีกช่วงเวลาหนึ่งคือระยะเวลาการวิ่ง Java overloads ตัวดำเนินการ + สำหรับประเภทสตริงและคุณสามารถใช้ + โดยตรงเพื่อเชื่อมต่อสองสตริง การเรียกวิธีการฝึกงาน () ของคลาสสตริงในระหว่างการรันไทม์สามารถเพิ่มวัตถุแบบไดนามิกลงในพูลสตริง
แยกความแตกต่างระหว่างสองวิธีในการสร้างวัตถุสตริง "" และใหม่ ()
สตริงเป็นข้อมูลบรรจุภัณฑ์พิเศษ สามารถใช้:
string str1 = สตริงใหม่ ("123"); string str2 = "123";สร้างสองรูปแบบ
อันแรกคือการใช้ใหม่ () เพื่อสร้างวัตถุใหม่ซึ่งจะถูกเก็บไว้ในกอง วัตถุใหม่ถูกสร้างขึ้นทุกครั้งที่เรียกว่า (จริง ๆ แล้วเป็นสองอย่างดังที่ได้กล่าวไว้ข้างต้น แต่หลังจากการดำรงอยู่ของ "123" ในสระว่ายน้ำคงที่ "123" ใหม่จะไม่ถูกสร้างขึ้นในสระคงที่อีกต่อไป)
ประเภทที่สองคือการสร้างตัวแปร STR ไปยังวัตถุของคลาสสตริงในสแต็กก่อนจากนั้นใช้การอ้างอิงเชิงสัญลักษณ์เพื่อดูว่ามี "ABC" ในพูลคงที่สตริงหรือไม่ ถ้าไม่เก็บ "abc" ลงในพูลคงที่สตริงและให้ str ชี้ไปที่ "abc" หากมี "ABC" อยู่แล้วให้ชี้ไปที่ "ABC" โดยตรง
เราควรให้ความสนใจในเวลานี้
ในอีกด้านหนึ่งวิธีการเขียนครั้งแรกมีประโยชน์และบันทึกพื้นที่หน่วยความจำ ในขณะเดียวกันก็สามารถปรับปรุงความเร็วในการทำงานของโปรแกรมในระดับหนึ่งเนื่องจาก JVM จะตัดสินใจโดยอัตโนมัติว่าจำเป็นต้องสร้างวัตถุใหม่ตามสถานการณ์จริงของข้อมูลในสแต็กหรือไม่ สำหรับรหัสของสตริง str = สตริงใหม่ ("123"); วัตถุใหม่ถูกสร้างขึ้นในฮีปโดยไม่คำนึงว่าค่าสตริงมีค่าเท่ากันหรือไม่ไม่ว่าจะเป็นสิ่งจำเป็นในการสร้างวัตถุใหม่ซึ่งจะเป็นการเพิ่มภาระในโปรแกรม ในทางกลับกันเมื่อเรากำหนดคลาสโดยใช้รูปแบบเช่น String str = "123"; เรามักจะรับมันเพื่อให้เราสร้างวัตถุ STR ของคลาสสตริง
วัตถุอาจไม่ได้ถูกสร้างขึ้น! และอาจจะชี้ไปที่วัตถุที่ถูกสร้างขึ้นก่อนหน้านี้ ผ่านวิธีใหม่ () เท่านั้นเราสามารถตรวจสอบให้แน่ใจว่ามีการสร้างวัตถุใหม่ทุกครั้ง
โปรดดูตัวอย่างต่อไปนี้
แพ็คเกจ TestString; Public Class TestString {โมฆะสาธารณะคงที่หลัก (String [] args) {String a = "123"; สตริง b = "123"; System.out.println (a == b); System.out.println (A.Equals (B)); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ เนื้อหาของวัตถุที่อ้างอิงทั้งสองในกองเหมือนกันดังนั้น A.Equals (b) เป็นจริง */ string c = สตริงใหม่ ("1234"); System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- เช่นเดียวกับ d heap ดังนั้น c.equals (d) เป็นจริง */ string e = "a1"; สตริง f = "a" +1; System.out.println (e == f); System.out.println (e.equals (f)); System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - * ใช่แล้วตัวดำเนินการบางตัวมีผู้ดำเนินการมากเกินไป แต่คุณไม่สามารถใช้ตัวดำเนินการมากเกินไปที่กำหนดเอง "H"; System.out.println ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!