เพิ่งอ่าน blog เรื่อง Why 1000 == 1000 Returns False, but 100 == 100 Returns True in Java ?
แค่เห็นชื่อเรื่องก็งง แต่แอบน่าสนใจ สำหรับ Java Puzzle
โดยใน blog อธิบายที่มาที่ไปได้อย่างน่าสนใจ
ซึ่งน่าจะทำให้เราเข้าใน Java ดีขึ้นมาอีกนิดนึง
ดังนั้นมาดูกันหน่อย ว่าทำไมถึงเป็นเช่นนั้น
มีการพูดคุยใน Facebook ที่นี่
[fb_embed_post href="https://www.facebook.com/somkiatspns/posts/10153769789653588/" width="550"/]
ปัญหามันเกิดจาก code ชุดนี้
เป็น code ที่น่าสนใจ และ น่าค้นหาอย่างมากมาย [gist id="1b8b815ea6b3711e34b8" file="Aha.java"]ลองคิดเล่น ๆ ว่า ผลการทำงานจะเป็นอย่างไร ?... ผลการทำงาน คือ false true มาถึงตรงนี้เล่นเอางงไปเลย !! ทำไม 100 == 100 แล้ว ทำไม 1000 != 1000 ล่ะ แบบนี้มันลำเอียง หรือ ทำงานไม่ถูกต้องหรือเปล่า ?
โดยพื้นฐานของภาษา Java สำหรับการใช้งาน ==
จะเท่ากัน หรือ ผลที่ได้คือ true ก็ต่อเมื่อทั้งสอง object ชี้ไปยังตำแหน่งเดียวกัน และมีค่าเท่ากัน ดังนั้น จากความรู้นี้ ผลที่ควรได้คือ false falseแต่การทำงานจริง ๆ มันไม่ตามทฤษฎีเลยนะ
ซึ่งเป็นสิ่งที่น่าสนใจอย่างมาก ดังนั้นมาหาเหตุผลกันดีกว่า ด้วยการเปิดดู source code ของ Integer.java กัน ซึ่งเราจะดูที่ method valueOf() [gist id="1b8b815ea6b3711e34b8" file="Integer.java"] จาก code จะเห็นว่ามีการเรียกใช้งาน property จาก class IntegerCache ด้วย คำถามที่เกิดขึ้นมา ก็คือ- IntegerCache.high มีค่าเท่าไร ?
- IntegerCache.low มีค่าเท่าไร ?
- IntegerCache.high =127
- IntegerCache.low = -128