คำถามติดแท็ก string-interning


14
เมื่อใดที่เราควรใช้วิธีการฝึกงานของตัวอักษร String on String
ตามString # ฝึกงาน () , internวิธีการที่ควรจะกลับ String จากสระว่ายน้ำ String ถ้าเชือกที่พบในสระว่ายน้ำ String มิฉะนั้นวัตถุสตริงใหม่จะถูกเพิ่มเข้ามาในสระว่ายน้ำ String และการอ้างอิงของสายนี้จะถูกส่งกลับ ดังนั้นฉันลองทำสิ่งนี้: String s1 = "Rakesh"; String s2 = "Rakesh"; String s3 = "Rakesh".intern(); if ( s1 == s2 ){ System.out.println("s1 and s2 are same"); // 1. } if ( s1 == s3 ){ System.out.println("s1 and s3 …

4
เหตุใด (เฉพาะ) คอมไพเลอร์บางตัวจึงใช้แอดเดรสเดียวกันสำหรับตัวอักษรสตริงที่เหมือนกัน
https://godbolt.org/z/cyBiWY ฉันเห็น'some'ตัวอักษรสองตัวในโค้ดแอสเซมเบลอร์ที่สร้างโดย MSVC แต่มีเพียงตัวเดียวที่มี clang และ gcc สิ่งนี้นำไปสู่ผลลัพธ์ของการเรียกใช้โค้ดที่แตกต่างกันโดยสิ้นเชิง static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } } ใครสามารถอธิบายความแตกต่างและความคล้ายคลึงกันระหว่างผลลัพธ์การคอมไพล์เหล่านั้นได้บ้าง เหตุใด clang / gcc จึงเพิ่มประสิทธิภาพบางอย่างแม้ว่าจะไม่มีการร้องขอการปรับให้เหมาะสมก็ตาม นี่เป็นพฤติกรรมที่ไม่ได้กำหนดหรือไม่? ฉันยังสังเกตเห็นว่าถ้าฉันเปลี่ยนการประกาศเป็นที่แสดงด้านล่าง clang / gcc / msvc จะไม่ทิ้ง"some"รหัสแอสเซมเบลอร์เลย ทำไมพฤติกรรมถึงแตกต่างกัน? static …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.