I want to know what exactly the output is when I do the following.
class Data {
int a = 5;
}
class Main {
public static void main(String[] args) {
d
That code calls the default toString()
implementation of the Object
class, that is:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
What happens is that the default toString() method of your class is getting used. This method is defined as follows:
The
toString
method for classObject
returns 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())
The value returned by the default hashCode() method is implementation-specific:
As much as is reasonably practical, the
hashCode
method defined by classObject
does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
When you print an instance of your class, that does not override the toString
method, then the toString
method of Object
class is used. Which prints an output in the form: -
data@1ae73783
The first part of that output
shows the type of the object.
And the 2nd part is the hexadecimal representation of the hashCode
of your object.
Here's the source code of Object.toString()
method, that you can find in the installation directory of your jdk
, under src
folder: -
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
The Javadoc for hashCode() and toString() in the Object
class should be able to clarify this for you.