2

鉴于以下片段,我有一个小问题:

StringBuilder stringBuild = new StringBuilder(3);
stringBuild.append("hello");
System.out.println(stringBuild+2); // if I omit the (+2) bit hence only stringBUild it works

toString()它是否仅在某些情况下自动调用对象?(情况:根本没有操作或先前的字符串污染)

4

1 回答 1

6

编译器从不toString()隐式调用方法参数。

您可能在想的是,有一个重载System.out.println需要一个Object(而不是一个字符串) - 这是编译器将链接到的方法。并且此方法的特定实现调用toString传入的对象(在运行时)。这只是代码,与编译器行为无关。

所以将一个对象传递给System.out.println“作品”。传入stringBuild+2根本不会编译 - 没有+运算符StringBuilder可以接受 int。(而且你不能自己创建一个,因为 Java 不允许运算符重载。)

正如 ADTC 和 tom 所指出的,字符串连接的第二个参数(字符串的+运算符)存在隐式字符串转换。因此,虽然stringBuild没有+运算符,stringBuild.toString()但您可以调用stringBuild.toString()+2.

于 2013-06-19T07:51:44.930 回答