System.out.println()内的toString()方法是双重调用?

And*_*ell 11 java printing double tostring call

我的一位教授曾说过以下代码永远不应该做:

的System.out.println(object.toString());

他说(我相信引用"有效Java")会导致双重调用.由于print语句调用对象的toString方法,因此将toString方法调用两次效率较低.首选方法是使用:

的System.out.println(对象);

显然,这种方式在代码中看起来更好,可以节省时间.无论怎样,我都会这样做,但我的问题是"这实际上更有效吗?".在查看PrintStream文档时,print方法已被重载以获取String作为参数(如果首先调用toString方法,则会出现这种情况).我没有看到那个版本的print方法调用输入参数的toString方法,我不相信它会这样做有意义.

此外,对不起,如果这是重复.我找不到任何主题.

And*_*mas 9

您的示例在PrintStream中调用两种不同的方法.两人toString()最多打电话一次.

但是,使用有潜在的优势System.out.println(object).如果object为null,则打印"null".另一个语句抛出NullPointerException.


das*_*ght 6

不,它效率不高 - 正是因为你提到的过载.此外,在通话toString上的String非常快,所以即使没有过载的差别就无法衡量.

但是,你的教授对于不打电话是正确的System.out.println(object.toString());,但原因是不同的:由于电话是不必要的,你的代码的读者可能会感到困惑.