Primitive Variable
Consider the code,
final int i = 12; i = 15; //ERROR i++; //ERROR
- The content of the primitive variable is the actual value.
- The value of the primitive variable cannot be changed once initialized.
Reference Variable
- The content of the reference variable is reference to the object in the memory, i.e.) the way to get to the object in the memory.
- Reference variable cannot be reassigned to refer to a different object in the memory.
class Person { String name; int age; public static void main(String[] args) { final Person p1 = new Person(); p1 = new Person(); //ERROR Person p2 = new Person(); p1 = p2; //ERROR p1 = null; //ERROR } }
- But the data (properties) within the object can be changed.
- Final reference allows you to modify the state of the object but you cannot modify the reference variable to point to a different object in the memory.
class Person { String name; int age; public static void main(String[] args) { final Person p1 = new Person(); p1.age = 12; p1.name = "John"; //This is legal. You can modify the state of final reference. p1.age = 30; p1.name = "Peter"; } }