Is there a difference between initializing a variable using new, followed by assignment and just assignment on initialization?
I am trying to learn Java.
I have a custom class, which has attributes:
public class开发者_JAVA技巧 Person{
private String name;
}
I have another class, where I do:
public class foo{
private Person guy;
public void setGuy(Person guy){
this.guy = guy;
}
public Person getGuy(){
return guy;
}
void someMethod(){
Person anotherGuy = new Person();
anotherGuy = getGuy();
}
}
I am confused when I use the getGuy()
method.
I thought that when I do this:
Person anotherGuy = new Person();
anotherGuy = getGuy();
I create a new object, which has the same value as guy. But it seems that anotherGuy is actually a pointer to guy. So
Person anotherGuy = getGuy();
and the above 2 lines, do the exact same thing? I am confused. Also then how do I create a entirely new object in memory?
So
Person anotherGuy = getGuy();
and the above 2 lines, do the exact same thing?
No, the other version creates a new Person() object first and then discards it (which is just a waste of memory and processor cycles).
Person anotherGuy;
this is a reference to a Person object
anotherGuy = new Person();
this sets the reference to a new Person object
anotherGuy = getGuy();
this sets the reference to the same reference as the guy member of foo.
I you want to "copy" object you might want to have a look for Object.clone()
While folks have already talked/explained about the behavior of your existing code, in order to do what you want to, use the clone
feature in Java, wherein your Person class would implement the Cloneable
interface, which would ask you to implement the clone()
method.
Your clone()
method should like this :
public Object clone()
{
Person p = new Person();
p.setName(this.name);
// similarly copy any other properties you want
return p;
}
and then invoke clone to copy your object:
Person another = (Person) person.clone();
Java variables can only contain primitives and references. Person
is a reference to an object. (You don't have to use &
like you might in C++ because its the only option)
When you do
Person anotherGuy = new Person(); // create a new object and assign the reference.
anotherGuy = getGuy(); // change the reference in `anotherGuy` to be the one returned by getGuy();
Yes, both do the same thing, in that after both method calls, anotherGuy == null
.
精彩评论