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)