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

ความแตกต่างระหว่าง Constants และ Final Variables ใน Java

Constant (ค่าคงที่แท้จริง) ใน Java

Java ไม่มีคีย์เวิร์ด const แต่มาจาก C/C++ แต่เราสร้าง Constant ได้โดยใช้ static final

  • static -> โหลดเข้าหน่วยความจำตอน Compile-time มีเพียง หนึ่ง Copy** ตลอดโปรแกรม
  • final -> ไม่สามารถเปลี่ยนค่าได้

ตัวอย่าง Constant

class Data {
    static final int INTEGER_CONSTANT = 20;
    static final String STR_CONSTANT = "Hello";
}

public class ConstantsExample {
    public static void main(String args[]) {
        System.out.println("Integer: " + Data.INTEGER_CONSTANT);
        System.out.println("String: " + Data.STR_CONSTANT);
    }
}

ผลลัพธ์

Integer: 20
String: Hello

Final Variable (ตัวแปร Final ธรรมดา)

มีแค่ final ไม่มี static ค่าจะไม่เปลี่ยนแปลงได้ แต่ แต่ละ Object จะมี Copy ของตัวเอง

ตัวอย่าง Final Variable

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

public class FinalExample {
    public static void main(String args[]) {
        Data obj1 = new Data();
        Data obj2 = new Data();
        System.out.println("Obj1: " + obj1.number);
        System.out.println("Obj2: " + obj2.number);
        // obj1.number = 30; // Compile Error: cannot assign to final variable
    }
}

ผลลัพธ์

Obj1: 20
Obj2: 20

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

ลักษณะ Constant (static final) Final Variable (final only)
จำนวน Copy ในหน่วยความจำ 1 Copy (Class Level) 1 Copy ต่อ 1 Object (Instance Level)
เข้าถึงผ่าน ClassName.FIELD objectReference.FIELD
การเปลี่ยนค่า ห้าม (Compile Error) ห้าม (Compile Error)
เวลาที่รู้ค่า Compile-time (ถ้าเป็น Primitive/String) Runtime (ตอนสร้าง Object)

สรุป

ใช้ static final สำหรับค่าคงที่ที่แชร์ร่วมกันทั่วโปรแกรม (เช่น Math.PI, Config ค่าคงที่) ใช้ final instance variable สำหรับค่าที่ตั้งค่าตอนสร้าง Object แล้วไม่ให้เปลี่ยน (เช่น ID, Immutable Object Fields)