Java传递StringBuilder作为方法参数出现类型不匹配等报错如何解决?
报错原因
- 类型不匹配错误:你定义的
appendLetterToStringObject方法第一个形参是String类型,但调用时传入的officeLocation1是StringBuilder类型,二者没有继承关系,无法自动转换,所以触发158行的类型转换报错。 - 方法定义逻辑错误:
String类是不可变类,本身没有append方法,你在方法里调用name.append自然找不到对应方法,触发找不到符号报错。- 方法定义的返回值类型是
void,代表无返回值,但你代码里写了return name,不符合返回值要求,触发返回值不匹配报错。
- 隐藏问题:你写的
appendLetterToStringObject是实例方法,而main是静态方法,静态方法无法直接调用非静态的实例方法,就算解决上面两个问题,后续还会触发静态调用错误。
修复方案
直接修改appendLetterToStringObject方法的定义即可,修改后的代码如下:
// 加static修饰让静态main方法可以调用,第一个参数改成StringBuilder类型 public static void appendLetterToStringObject(StringBuilder name, String letter) { name.append(letter); // StringBuilder是引用传递,方法内修改会直接作用于原对象,不需要返回值,去掉return语句 }
如果需要保留返回值的写法,也可以改成:
public static StringBuilder appendLetterToStringObject(StringBuilder name, String letter) { return name.append(letter); }
修改后不需要调整调用逻辑,原来的appendLetterToStringObject(officeLocation1, "Hello");可以正常运行。
内容的提问来源于stack exchange,提问作者user15448629
相关产品推荐
相关产品推荐

