有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在这种情况下编译器中实际发生了什么

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

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()?(情况:要么根本没有操作,要么之前的字符串继续)


共 (1) 个答案

  1. # 1 楼答案

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

    你可能想的是,有一个an overload of ^{}需要一个Object(而不是一个字符串)——这是编译器将链接到的方法。该方法的这个特定实现对传入的对象(在运行时)调用toString。不过这只是代码,与编译器行为无关

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

    正如ADTC和tom所指出的,通过第二个参数到字符串连接(字符串的+运算符),存在隐式字符串转换。所以,虽然stringBuild没有+操作符,stringBuild.toString()会有,而你可以调用stringBuild.toString()+2