对象类toString()与Widening结合使用

时间:2017-11-07 11:29:40

标签: java

我的代码在下面,我有三个输出,并且调用了Object类的三个toString()方法,它以class @ hashcodeinhexadecimal形式给出输出,然后在输出1中为什么在其中自动装箱和加宽内部发生对象的值得到打印?

public class AutoBoxingUn
{

    static Object pp= new Object ();

    public static void main(String[] args)
    {   


        int q = 10;
        Object o=q;
        System.out.println("O"+"..."+o.toString());     \\ O...10    ( output 1 )

        System.out.println(pp.toString());          \\ java.lang.Object@ee7d9f1 ( output 2 )

        A aa= new A(11);
        System.out.println(aa);                 \\ A@1edf1c96   ( output 3 )
    }



}

class A extends AutoBoxingUn
{   int o;
    A(int o)
    {
        this.o=o;
    }
    void m2()
    {}
}

4 个答案:

答案 0 :(得分:1)

对象o在内部保存Integer值,因此在运行时调用Integer类的toString()方法,它覆盖Object类toString()方法以打印对象/整数

答案 1 :(得分:1)

如果你要调用Objetc类的toString()方法然后改变Object o = q; to Object o = new Object();在你的代码中

答案 2 :(得分:0)

  

为什么在输出1中,自动装箱和加宽在内部发生对象的值得到打印?

o.toString()调用toString类的Integer实现,因为o的运行时间(因为您已将int分配给Object Integer引用,它导致将UIView对象分配给该变量。

因此打印10个。

答案 3 :(得分:0)

要理解,请尝试instanceof运算符

int q = 10;
Object o=q;
    if(o instanceof Integer){
        System.out.println("o is an Integer");
    } else {
        System.out.println("o is an Object");
    }

O / P: 的 o is an Integer

这意味着:o是Object的引用并指向Integer对象,因此o.toString()将调用toString()类的Integer方法。 Integer类,内部扩展Object类并覆盖(并具有自己的实现)Object的toString()方法。