public class ChangeTest {
public void changeMap(Map s){
s.put("2", "he");
}
public void changeString(String s){
s = s + "hello";
}
public static void main(String[] args) {
Map map = new HashMap();
map.put("key", "value");
new SocketTest().changeMap(map);
System.out.println(map);
String str = "123";
new SocketTest().changeString(str);
System.out.println(str);
}
}
请问输出什么?
为什么?结果不重要,重要的是原因。
public void changeMap(Map s){
s.put("2", "he");
}
public void changeString(String s){
s = s + "hello";
}
public static void main(String[] args) {
Map map = new HashMap();
map.put("key", "value");
new SocketTest().changeMap(map);
System.out.println(map);
String str = "123";
new SocketTest().changeString(str);
System.out.println(str);
}
}
请问输出什么?
为什么?结果不重要,重要的是原因。
String类型作为参数是作为值传递,返回主函数就释放掉了,但是在主函数中原先保存的值还是存在的;
应该是这样理解的~~~
{key=value,2=he}
123
原因:JAVA只采用pass by value(传值),即使是传递对象,也是按值传递的!
可以改变参数的内部状态,题中map的状态被修改
但对参数对象重新赋值是没有意义的,(s=s+"hello",将参数s连接一个字符串常量重新赋值给s),str仍然是123.