Re: Objects only passed by copy?
Eric Sosman wrote:
.. . .
Some people (and some writers of books) like to say that
primitive values (int, double, and so on) are passed by value,
while objects (String, JButton, et al.) are passed by reference.
Which is incorrect.
I think this is needlessly confusing
and wrong
-- and it still doesn't explain `otherthing(obj.getAnswer())'.
To my mind, it is more
useful to think of everything being passed by value, where a
which is correct
"value" may be
- a primitive value like 5 or 98.6 or 'X' or false, or
- a reference value that is a "handle" for some object
instance (or is null).
This is the correct view, and the one looked for on, e.g., the
Java certification tests.
With this point of view many things that are complicated in the
"pass by value or sometimes by reference" scheme become much
simpler: You *always* pass by value, whether the value is a
primitive or a reference.
This is the correct view.
With either viewpoint objects are not "passed by copy," by
That is correct. It is the reference that is copied.
It is like a person with a P.O. box and a street address. A letter
addressed to that person reaches the same entity regardless of the
pointer used.
Remember, a Java reference is a pointer.
which I mean that the object inside the method is not an independent
copy of the object provided by the caller. There's just one object,
and the method gets a copy of the *reference* to that object
i.e., the pointer to the object,
-- and that leads to the example below.
I'm trying to think of a piece of code that would demonstrate this
but can't think of anything off the top of my head.
Okay. Let's write a method that appends 'X' to a StringBuilder:
... [excellent pedagogical example] ...
Question: After the call, does the StringBuilder instance that
`adage' refers to contain an 'X' or not?
... [excellent pedagogical example] ...
Which is it? Make your prediction before trying the code,
then try the code and check your answer.
--
Lew