鉴于以下片段,我有一个小问题:
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()
它是否仅在某些情况下自动调用对象?(情况:根本没有操作或先前的字符串污染)
鉴于以下片段,我有一个小问题:
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()
它是否仅在某些情况下自动调用对象?(情况:根本没有操作或先前的字符串污染)
编译器从不toString()
隐式调用方法参数。
您可能在想的是,有一个重载System.out.println
需要一个Object
(而不是一个字符串) - 这是编译器将链接到的方法。并且此方法的特定实现调用toString
传入的对象(在运行时)。这只是代码,与编译器行为无关。
所以将一个对象传递给System.out.println
“作品”。传入stringBuild+2
根本不会编译 - 没有+
运算符StringBuilder
可以接受 int。(而且你不能自己创建一个,因为 Java 不允许运算符重载。)
正如 ADTC 和 tom 所指出的,字符串连接的第二个参数(字符串的+
运算符)存在隐式字符串转换。因此,虽然stringBuild
没有+
运算符,stringBuild.toString()
但您可以调用stringBuild.toString()+2
.