我在很多网站上搜索过,据他们说答案是否定的, 为什么Java中的这个prog在没有点运算符的情况下调用这个方法?
class A
{
public String toString()
{
return "Hello";
}
public static void main(String ar[])
{
A a=new A();
System.out.println(a);
}
}
答案 0 :(得分:5)
您已覆盖toString
的{{1}}方法。所有Java类都隐式扩展Object
。
Read the documentation,虽然这与你的问题有点无关。见下文原因。
You may want to see how Object
behaves。
打印一个对象,然后终止该行。此方法首先调用String.valueOf(x)来获取打印对象的字符串值,然后表现为调用print(String)然后调用println()。
从那里,你会想知道System.out.println(java.lang.Object)
做了什么:
退货:
如果参数为null,则字符串等于“null”;否则,返回obj.toString()的值。
答案 1 :(得分:3)
在println
方法中,它将此内容写入输出流:
a == null ? "null" : a.toString()
答案 2 :(得分:0)
假设您询问如何在没有“。”的情况下调用方法。
因为在这种情况下a.toString()
被隐式地称为
这种行为有点类似于:
Class A{
void doSomething(){}
void doAnother(){
//both are leagal
doSomething(); //implicitly this.doSomething()
this.doSomething();
}
}
答案 3 :(得分:0)
当你在任何对象引用上调用sysout时,调用toString方法
System.out.println(a);
由于您已重写此方法以返回hello
,因此程序会打印hello而不调用任何点运算符。