Many languages are confusing as they differ in often unstated distinction between the value and "handle" -- Java is no exception! (reference,address,pointer) of an entity
|
Consider assignment: a = b; // sets value of a to value of b
|
If a and b are primitive types, then they hold "actual literals" and so if b=66, then a is set to 66
-
In this case if you change b, then a is left unchanged
|
However if a or b is an object, b is in fact a reference and so one sets a to refer to same object as b (i.e. same "location" in memory)
-
if you change b in some way, then a will be changed accordingly
-
Note null is value of an object which has not been assigned (constructed) and so does not point anywhere
|
Arguments to Methods are always passed by value BUT if an object is an argument, then that value is ALWAYS a reference and so in practice
-
Primitive types are passed by value
-
Objects are passed by reference
|
Arrays reflect properties of what they are arrays of!
|