Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Final Keyword เพียงอย่างเดียวพอสำหรับสร้าง Constant ใน Java หรือไม่?

คำตอบคือ ไม่พอ ต้องใช้ static final คู่กัน เพื่อสร้าง Constant ตามนิยามที่ถูกต้อง (ค่าไม่เปลี่ยน + มีเพียง 1 Copy ทั้งโปรแกรม)

ทำไม final เพียงอย่างเดียวไม่พอ?

final instance variable (ไม่มี static) จะทำให้ แต่ละ Object มี Copy ของตัวเอง แม้ค่าจะเหมือนกันก็ตาม

ตัวอย่าง: final เพียงอย่างเดียว (ไม่ใช่ Constant แท้)

class Data {
    final int number = 20; // ไม่มี static
}

public class ConstantExample {
    public static void main(String args[]) {
        Data obj1 = new Data();
        Data obj2 = new Data();
        
        System.out.println("Obj1: " + obj1.number); // 20
        System.out.println("Obj2: " + obj2.number); // 20
        
        // แม้ค่าเหมือนกัน แต่เป็น Instance แยกกัน
        System.out.println(obj1.number == obj2.number); // true (ค่าเท่ากัน)
        // แต่ในหน่วยความจำเป็นตัวแปรคนละตัวกัน
    }
}

ตัวอย่าง: static final (Constant แท้)

class Data {
    static final int CONSTANT = 20; // มี static ด้วย
}

public class TrueConstant {
    public static void main(String args[]) {
        // เข้าถึงผ่าน Class ไม่ต้อง new Object
        System.out.println("Value: " + Data.CONSTANT); // 20
        // มีเพียง 1 Copy ใน Memory ทั้งโปรแกรม
    }
}

ตารางเปรียบเทียบ

ลักษณะ final (Instance) static final (Constant)
Memory Copies 1 ต่อ Object 1 ทั้งโปรแกรม (Class Level)
การเข้าถึง ต้อง new Object ก่อน ClassName.FIELD ได้เลย
Compile-time Constant ไม่ใช่ (Runtime) ใช่ (ถ้าเป็น Primitive/String)
Inlining ใน Bytecode ไม่ได้ ได้ (Optimization)

สรุป

  • Constant จริง = static final (Uppercase naming convention: MAX_SIZE)
  • Final Instance Variable = ใช้สำหรับ Immutable Fields ใน Object (เช่น ID, Config ต่อ Object)
  • Java Compiler จะ Inline ค่า static final primitive/string เข้าไปใน Bytecode เรียกใช้ได้เร็วขึ้น