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?
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 toString
method for class
Objectreturns 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With