[Logo]
Forums Register Login
What is the purpose of a final instance variable?
I know java allows final instance variables. But my question is what good is a final instance variable? If the value is final, it means all the objects of that class will have the same value for that instance variable. What purpose would it serve?

Why not replace it by a final static variable? Wouldn't it fit the requirement?

So why do we have a final instance variable in java?
 
Larry Olson wrote:I know java allows final instance variables. But my question is what good is a final instance variable? If the value is final, it means all the objects of that class will have the same value for that instance variable. What purpose would it serve?


You're confusing final and static. The final keyword means that the reference (for objects) or value (for primitives) can't be changed once set. It's the closest thing that Java has to a constant.

John.
 
Larry Olson wrote:I know java allows final instance variables. But my question is what good is a final instance variable? If the value is final, it means all the objects of that class will have the same value for that instance variable. What purpose would it serve?

Why not replace it by a final static variable? Wouldn't it fit the requirement?

So why do we have a final instance variable in java?


Declaring instance as final informs compiler that some kind of optimalization on this instance is possible.
For example in this code:

if you declare 'b' as final, compiler knows that b will never change, so it can catch b in the register
and do not retrieve value of b from the memory on each loop cycle.
If b is not declared final, compiler knows that value of b could be changed at any time (for example inside someFunction)
and 'b' must be retrieved from the memory on each cycle.


 
Larry Olson wrote:If the value is final, it means all the objects of that class will have the same value for that instance variable. What purpose would it serve?

Agree. There is no use of such code Since you can't change the value, there is no use for such copy per instance.
For these members, there's actually no space allocated in each object.

So why do we have a final instance variable in java?

it's possible to have a final variable whose value is different in every object.



 
Larry Olson wrote:I know java allows final instance variables. But my question is what good is a final instance variable? If the value is final, it means all the objects of that class will have the same value for that instance variable. What purpose would it serve?

Why not replace it by a final static variable? Wouldn't it fit the requirement?

So why do we have a final instance variable in java?


An example from Spring:



If the above class variable was static instead of instance, the logger would reflect the wrong class in different subclasses. (I think it would be the first one that was instantiated.)
Making instance variable final is a way to make the class immutable. And, immutable class is a good practice unless you explicitly need a mutable class.

http://java.sun.com/docs/books/tutorial/essential/concurrency/imstrat.html
 
Alec Lee wrote:Making instance variable final is a way to make the class immutable. . .
More precisely, making instance variables final is part of the way to make the class immutable.
 
Dan Patsey wrote:
Larry Olson wrote:I know java allows final instance variables. But my question is what good is a final instance variable? If the value is final, it means all the objects of that class will have the same value for that instance variable. What purpose would it serve?

Why not replace it by a final static variable? Wouldn't it fit the requirement?

So why do we have a final instance variable in java?


An example from Spring:



If the above class variable was static instead of instance, the logger would reflect the wrong class in different subclasses. (I think it would be the first one that was instantiated.)


You actually could not use that if it was static since the getClass() method is not static.
Wink, wink, nudge, nudge, say no more ... https://richsoil.com/cards



All times above are in ranch (not your local) time.
The current ranch time is
Nov 23, 2017 06:17:20.