รหัสต่อไปนี้:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
รวบรวมโดยไม่มีข้อผิดพลาดใน JDK 8 (ใช้ -source 1.6) แต่ล้มเหลวใน JDK 6 พร้อมข้อความแสดงข้อผิดพลาด:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
ในขณะที่ฉันเข้าใจว่าข้อผิดพลาดเกี่ยวกับอะไรทำไมถึงต้องคอมไพล์ด้วย JDK 8? เอกสารนี้มีอยู่ทุกที่หรือไม่?
ฉันเดาว่าค่าไม่จำเป็นต้องเป็น String ถ้า value เป็นจำนวนเต็มดังนั้นฉันไม่สมเหตุสมผลที่จะเพิ่มสตริงเข้าไป อาจบายคุณสามารถลองใส่ค่าลงใน string
—
fedoraHacker
@fedoraHacker นิพจน์
—
Grodriguez
value = value + suffix
นั้นถูกกฎหมายอย่างสมบูรณ์โดยไม่คำนึงถึงประเภทของค่า ดังนั้นดูเหมือนว่าฉันvalue += suffix
ควรถูกกฎหมายด้วย
ว้าวฉันไม่รู้เลย ฉันคิดว่าจุดรวมของวัตถุที่แตกต่างกันคือการกำหนดกฎสำหรับข้อมูลที่สามารถทำได้และไม่สามารถทำได้ จุดทั้งหมดของการมีประเภทข้อมูลและวัตถุที่แตกต่างกันคือการแยกความรับผิดชอบเพื่อให้แน่ใจว่าประเภททำสิ่งเดียว แต่ทำได้ดี ฉันแค่งุนงงว่าคุณสามารถผสมประเภทข้อมูลเช่นนั้นได้ คุณได้เรียนรู้อะไรบางอย่างทุกวัน :) และค่า = ค่า + คำต่อท้ายคือ excact เช่นเดียวกับค่า + = คำต่อท้ายดังนั้นฉันไม่โต้แย้งไวยากรณ์เลย
—
fedoraHacker
ใช่ แต่ประเภทสตริงนั้นค่อนข้างพิเศษ ตัวดำเนินการ + ที่นี่คือ "ตัวดำเนินการเรียงสตริง"; ถ้าตัวถูกดำเนินการตัวใดตัวหนึ่งเป็นสตริงตัวอื่นจะถูกแปลงเป็นสตริงก่อนที่นิพจน์จะถูกประเมิน ดูส่วนของ JLS
—
Grodriguez
ฉันเข้าใจแล้วไม่ทราบว่าสายแปลงเป็นแบบนั้น ขอบคุณที่สละเวลาตอบแม้คำถามจะได้รับคำตอบ!
—
fedoraHacker