Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can implementing Java copy constructor result in same instance?

I've implemented a copy constructor in Java 8 and use it like this:

User user = // some object
LOG.debug("{}", user);
this.userAccount = new User(user);
LOG.debug("{}", this.userAccount);

Output:

User@2799061
User@2799061

It's the same object! How can this be? Is this some kind of optimalization of which I'm unaware?

Also, my 'User' class is a JPA managed entity. Can this somehow interfere?

like image 269
matsa Avatar asked Feb 12 '23 21:02

matsa


1 Answers

It's the same object!

No, it isn't. It just results in the same output when you use it with your LOG.debug method. If LOG.debug is using toString, that means it has the same string result from toString. This could be because of your implementation of toString, or it could be because the object has the same hash code, since the standard Object#toString outputs the class name, @, and then the hash code in hex. See Object#toString in the Javadoc for details, but basically:

The toStringmethod for classObjectreturns a string consisting of the name of the class of which the object is an instance, the at-sign character@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

Re your title:

Can implementing Java copy constructor result in same instance?

No, not in Java.

like image 190
T.J. Crowder Avatar answered Feb 15 '23 09:02

T.J. Crowder