If I am printing an object of the class then it is printing the toString()
method implementation even I am not writing the toString()
method so wha
In java object class is super class to the each and every class.whenever your passing parameter to the system.out.println internally object class to string method will be excuted.it returns class name@reference value given but as per our application requirement object class to string method will override in collection and string class.it returns their content.
Every object in Java IS-A(n) Object
as well. Hence, if a toString()
implementation has not been provided by a class the default Object.toString()
gets invoked automatically.
Object.toString()
's default implementation simply prints the object's class name followed by the object's hash code which isn't very helpful. So, one should usually override toString()
to provide a more meaningful String representation of an object's runtime state.
even I am not writing the toString() method so what are the implementation,how it is calling toString() internally?
toString()
is one of the few methods (like equals()
, hashCode()
etc.) that gets called implicitly under certain programmatic situations like (just naming a few)
println()
Collection
of objects (toString()
is invoked on all the elements)strObj = "My obj as string is " + myObj;
)toString() method is present in Object class, so when u put obj in System.out.println(obj);, impliciyly it will call toString() present in Object class since every user created class will implicitly inherits Object class so as ur newly created class, that means that toString() is available in ur class so it will print something like for example: "PkgNamePackage.Classname@12cf4" However if u explicitely override toString method and give ur own implementation then it will written the string what ever u give in Overriden tostring method(); ex:
public class DogArray {
@Override
public String toString() {
return "Im the newly created Object";
}
public static void main(String args[]) {
DogArray d1 = new DogArray();
System.out.println(d1);
}
}
output: Im the newly created Object
You're not explicitly calling toString()
, but implicitly you are:
See:
System.out.println(foo); // foo is a non primitive variable
System is a class, with a static
field out, of type PrintStream. So you're calling the println(Object) method of a PrintStream
.
It is implemented like this:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
As we see, it's calling the String.valueOf(Object) method.
This is implemented as follows:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
And here you see, that toString() is called.
Everything inherits from Object, so the toString on Object will be called if you have not defined one.