【发布时间】:2015-10-01 16:26:55
【问题描述】:
我不明白为什么System.out.println(name)输出Sam不受方法的concat函数影响,而System.out.println (names) 输出 Sam4 作为方法的 append 方法的结果。为什么 StringBuilder 受影响而不是 String?通常,对对象的引用调用方法会影响调用者,所以我不明白为什么 String 结果保持不变。提前致谢
public static String speak(String name) {
name = name.concat("4");
return name;
}
public static StringBuilder test(StringBuilder names) {
names = names.append("4");
return names;
}
public static void main(String[] args) {
String name = "Sam";
speak(name);
System.out.println(name); //Sam
StringBuilder names = new StringBuilder("Sam");
test(names);
System.out.println(names); //Sam4
}
【问题讨论】:
-
这里有很多答案,基本上都说同样的话。很难选择一个来投票:)
-
@ArnaudDenoyelle 幸运的是你不需要只选择一个;)
-
@ArnaudDenoyelle 正如 Mark Rotteveel 所说,Helenesh 是必须做出艰难选择的人 ;)
标签: java string parameter-passing stringbuilder pass-by-value