when using Class type as method parameters, I have a question...
Hi,
I thought I have understood this issue without any problems already.
When using class type parameters for a method, the behavior is kind of
like pass-by-reference. The object can be modified by the code inside
the method, right? But today, I ran into an interesting problem: the
object cannot get the change it wants.
Suppose I have a class called Species. I have a method
//oldSpecies is an object of Species, its content has been set already.
//newSpecies is an object of Species, but its content has not been set
yet. i.e. its content all has been set by the default values. The
purpose of this method is to set newSpecies content based on different
condition.
public static void convertOldSpeciesToNewSpecies(Species oldSpecies,
Species newSpecies)
{
if(..) //BLOCK A
{
newSpecies = oldOne; //just assign it. Here is the problem! The
caller, the second parameter, does not get the value
}
else //BLOCK B
{
//in this case, newSpecies get assigned values. No problem, the caller
gets the value.
newSpecies.setXXX
newSpecies.setYYY
}
//print out newSpecies content
System.out.println(newSpecies.toString());
}
Helper.convertOldSpeciesToNewSpecies(speciesOne, speciesTwo);
Above calling, if the condition fits BLOCK B, result is correct
(speciesTwo gets the values it should get from inside the method).
But if the condition fits BLOCK A, speciesTwo does NOT get the content
of speciesOne. The printing inside the method shows that newSpecies has
got the correct content (same as speciesOne).
What is the problem? Thank you very much.
For my practical reason, I do not want to change the method to
public Species getNewSpecies(Species oldSpecies){..}