日期:2014-05-20 浏览次数:20704 次
static void operate(String str) {
str += "def";
}
static void mapAdd(Map<String, String> map) {
map.put("aa", "aa");
}
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = "abc";
operate(str1);
// str1指向了堆中new出的对象abc,像operate传递时,应该传递的是str1的引用
// 在方法中操作后,str1应该指向到操作后的新的对象,也就是abcdef
System.out.println(str1);
operate(str2);
// str2为栈中的对象,传递的就是abc数值,方法操作完后,新的值仅仅是方法中的局部变量
// 值未带出到main方法中来,所以str2还应该是abc
System.out.println(str2);
Map<String, String> map = new HashMap<String, String>();
map.put("bb", "bb");
// 这里没有疑问,mapAdd中传递的map为对象,传递的是引用,操作后map指向了操作后堆中的map值
// 操作后,main方法中map中有两队值。
mapAdd(map);
for (String str : map.keySet()) {
System.out.println(str);
}
}