How an object will call toString method implicitly?

后端 未结 5 1038
轮回少年
轮回少年 2020-11-28 09:20

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

相关标签:
5条回答
  • 2020-11-28 10:00

    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.

    0 讨论(0)
  • 2020-11-28 10:07

    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)

    • printing an object using println()
    • printing a Collection of objects (toString() is invoked on all the elements)
    • concatenation with a String (like strObj = "My obj as string is " + myObj;)
    0 讨论(0)
  • 2020-11-28 10:09

    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
    
    0 讨论(0)
  • 2020-11-28 10:14

    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.

    0 讨论(0)
  • 2020-11-28 10:17

    Everything inherits from Object, so the toString on Object will be called if you have not defined one.

    0 讨论(0)
提交回复
热议问题