I do not understand why System.out.println(name) outputs Sam without being affected by the method's concat function, while System.out.println(names) outputs Sam4 as a result of the method's append method. Why is StringBuilder affected and not String? Normally, calling methods on a reference to an object affects the caller, so I do not understand why the String result remains unchanged. Thanks in advance
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 }