鉴于以下代码段,我有一个小问题:
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()
。
您可能会想到的是,有一个an overload of System.out.println
带有一个Object
(而不是一个String)-这是编译器将链接到的方法。该方法的特定实现对传入的对象(在运行时)调用toString
。虽然这只是代码,但与编译器行为无关。
因此,将一个对象传递给System.out.println
“工作”。传入stringBuild+2
根本无法编译-+
上没有StringBuilder
运算符,它需要一个整数。 (而且您不能自己创建一个,因为Java不允许操作符重载。)
正如ADTC和tom所指出的那样,存在隐式String转换,其中第二个参数是字符串连接(字符串的+
运算符)。因此,尽管stringBuild
没有+
运算符,但stringBuild.toString()
会,并且您可以调用stringBuild.toString()+2
。