การปฏิบัติมาตรฐานคือไปกับสิ่งที่ไม่คาดคิดเว้นแต่คุณจะจัดการกับยาชื่อสามัญ (ตรวจสอบให้แน่ใจว่าคุณได้รับทราบถึงการautoboxing และ unboxing !)
มีหลายเหตุผลที่ควรทำตามการประชุม:
1. คุณหลีกเลี่ยงข้อผิดพลาดง่าย ๆ :
มีบางกรณีที่ไม่เข้าใจง่ายซึ่งมักจะเป็นผู้เริ่มต้น แม้แต่ผู้เข้ารหัสที่มีประสบการณ์ก็ล้มเหลวและทำผิดพลาดในบางครั้ง (หวังว่านี่จะตามมาด้วยการสาบานเมื่อพวกเขาดีบั๊กโค้ดและค้นหาข้อผิดพลาด!)
ความผิดพลาดที่ commmon มากที่สุดคือการใช้แทนa == b
a.equals(b)
ผู้คนเคยชินกับการทำสิ่งa == b
ดั้งเดิมดังนั้นจึงทำได้ง่ายเมื่อคุณใช้ Object wrappers
Integer a = new Integer(2);
Integer b = new Integer(2);
if (a == b) { // Should be a.equals(b)
// This never gets executed.
}
Integer c = Integer.valueOf(2);
Integer d = Integer.valueOf(2);
if (c == d) { // Should be a.equals(b), but happens to work with these particular values!
// This will get executed
}
Integer e = 1000;
Integer f = 1000;
if (e == f) { // Should be a.equals(b)
// Whether this gets executed depends on which compiler you use!
}
2. การอ่าน:
ลองพิจารณาสองตัวอย่างต่อไปนี้ คนส่วนใหญ่จะบอกว่าสองสามารถอ่านได้มากขึ้น
Integer a = 2;
Integer b = 2;
if (!a.equals(b)) {
// ...
}
int c = 2;
int d = 2;
if (c != d) {
// ...
}
3. ประสิทธิภาพ:
ความจริงก็คือการใช้ Object wrappers เป็นแบบดั้งเดิมนั้นช้ากว่าการใช้แบบดั้งเดิม คุณกำลังเพิ่มค่าใช้จ่ายของ instantiation วัตถุโทรวิธีการอื่น ๆ เพื่อสิ่งที่คุณใช้ทั่วทุกสถานที่
Knuth's "... พูดถึง 97% ของเวลา: การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด" การอ้างไม่ได้นำมาใช้จริงที่นี่ เขากำลังพูดถึงการเพิ่มประสิทธิภาพซึ่งทำให้รหัส (หรือระบบ) มีความซับซ้อนมากขึ้น - ถ้าคุณเห็นด้วยกับข้อที่ 2 นี่คือการเพิ่มประสิทธิภาพซึ่งทำให้รหัสนั้นซับซ้อนน้อยลง !
4. เป็นการประชุม:
หากคุณเลือกตัวเลือกโวหารที่แตกต่างกันถึง 99% ของโปรแกรมเมอร์ Java คนอื่น ๆ มีอยู่ 2 ข้อเสีย:
- คุณจะพบว่ารหัสของคนอื่นอ่านยากขึ้น 99% ของตัวอย่าง / บทช่วยสอน / อื่น ๆ ในนั้นจะใช้ระบบพื้นฐาน เมื่อใดก็ตามที่คุณอ่านคุณจะมีค่าใช้จ่ายเกี่ยวกับความรู้ความเข้าใจเป็นพิเศษเกี่ยวกับลักษณะของสไตล์ที่คุณคุ้นเคย
- คนอื่นจะพบรหัสของคุณอ่านยากขึ้น เมื่อใดก็ตามที่คุณถามคำถามเกี่ยวกับ Stack Overflow คุณจะต้องกรองคำตอบ / ความคิดเห็นที่ถามว่า "ทำไมคุณไม่ใช้ primitives" หากคุณไม่เชื่อฉันเพียงแค่ดูการต่อสู้ที่ผู้คนมีมากกว่าสิ่งต่าง ๆ เช่นการวางตำแหน่งซึ่งไม่มีผลกับรหัสที่สร้างขึ้น!
โดยปกติแล้วฉันจะแสดงรายการเคาน์เตอร์คะแนน แต่ฉันก็ไม่สามารถคิดเหตุผลที่ดีที่จะไม่ไปกับการประชุมที่นี่!