java吧 关注:1,273,058贴子:12,784,545
  • 8回复贴,共1

String和Map为什么没有变化

只看楼主收藏回复

https://bbs.csdn.net/topics/392493634
第一段代码
public static void main(String[] args) {
String str = "aaa";
Map<String, String> map = new HashMap<>();
change(str,map);
System.out.println(str);
System.out.println(map);
}
static void change(String str,Map<String, String> map) {
str = "bbb";
map = null;
//map.put("name", "China");
}
main方法执行结果为:
aaa
{}
str依旧是aaa? str作为引用类型, 此时为何没有指向bbb
map依旧是{}?同样map为何没有变成null
第二段代码
public static void main(String[] args) {
String str = "aaa";
Map<String, String> map = new HashMap<>();
change(str,map);
System.out.println(str);
System.out.println(map);
}
static void change(String str,Map<String, String> map) {
str = "bbb";
//map = null;
map.put("name", "China");
}
main方法执行结果为:
aaa
{name=China}
map变成了{name=China}而不是之前的{}? 为什么这个时候又可以改变map


IP属地:湖北1楼2018-12-14 15:00回复
    str改变会新创建一个放常量池,所以指向未改变


    来自Android客户端2楼2018-12-14 15:07
    收起回复
      2025-08-08 05:09:51
      广告
      不感兴趣
      开通SVIP免广告
      Map<String, String> map = new HashMap<>();
      System.out.println(map);
      change(str,map);
      System.out.println(map);
      这样子你就看懂了。当你new完直接把map输出出来你就能看出怎么回事了。


      3楼2018-12-14 15:14
      收起回复
        我大概知道了


        IP属地:湖北4楼2018-12-14 15:32
        回复
          String和Integer等可以看成是值传递,虽然是引用


          5楼2018-12-14 15:54
          回复