ทำไมการผนวก“” เข้ากับ String จะบันทึกหน่วยความจำ
String dataผมใช้ตัวแปรที่มีข้อมูลเป็นจำนวนมากในการพูด ฉันต้องการใช้ส่วนเล็ก ๆ ของสายนี้ในวิธีต่อไปนี้: this.smallpart = data.substring(12,18); หลังจากทำการดีบักได้หลายชั่วโมง (ด้วย visualizer หน่วยความจำ) ฉันพบว่าฟิลด์ออบเจ็กต์smallpartจดจำข้อมูลทั้งหมดจากdataแม้ว่ามันจะมีซับสตริงเท่านั้น เมื่อฉันเปลี่ยนรหัสเป็น: this.smallpart = data.substring(12,18)+""; .. ปัญหาได้รับการแก้ไข! ตอนนี้แอปพลิเคชันของฉันใช้หน่วยความจำน้อยมากในตอนนี้! เป็นไปได้อย่างไร? มีใครอธิบายเรื่องนี้ได้บ้าง ฉันคิดว่านี่ขนาดเล็กเก็บอ้างอิงถึงข้อมูล แต่ทำไม? อัปเดต: ฉันจะล้างสตริงขนาดใหญ่ได้อย่างไร data = new String (data.substring (0,100)) จะทำสิ่งนั้นหรือไม่