我有一个小问题,给出以下代码段:
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()
? (情况:根本没有操作或以前的字符串继承)
答案 0 :(得分:6)
编译器从不隐式调用方法参数上的toString()
。
您可能正在考虑的是,an overload of System.out.println
采用Object
(而不是字符串) - 这是编译器链接到的方法。并且该方法的这个特定实现在传入的Object上调用toString
(在运行时)。这只是代码,它与编译器行为无关。
因此将对象传递给System.out.println
“可行”。传递stringBuild+2
根本就不能编译 - +
上没有StringBuilder
运算符,它接受一个int。 (并且你不能自己创建一个,因为Java不允许运算符重载。)
正如ADTC和tom指出的那样,有一个隐式字符串转换,其中 second 参数用于字符串连接(字符串的+
运算符)。因此,虽然stringBuild
没有+
运算符,stringBuild.toString()
会,而可以调用stringBuild.toString()+2
。