我不懂为什么System.out.println(名称)输出Sam不受方法的 concat 函数的影响,而System.out.println(名称)输出Sam4作为该方法的追加方法的结果。为什么 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
}
因为当你打电话时speak(name);
,当你这样做时内心说话
name = name.concat("4");
它创建了一个新对象,因为String
s 是不可变的。当您更改原始字符串时,它会创建一个新对象,我同意您正在返回它,但您没有捕获它。
所以本质上你正在做的是:
name(new) = name(original) + '4'; // but you should notice that both the names are different objects.
try
String name = "Sam";
name = speak(name);
当然现在我认为没有必要解释为什么它与StringBuilder
除非你不知道StringBuilder
是可变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)