java传值和传引用的疑惑?

直接上代码,我的疑惑是!

有个疑惑,后面的list = new ArrayList<String>();会不会改变list的引用,导 致map.put("1",list);中的list也指向后面的list内存地址

public class Test {

	
	public static void main(String[] args) {
		Map<String, List<String>> map = new HashMap<String, List<String>>();
		/**
		 * 有个疑问,后面的list = new ArrayList<String>();会不会改变list的引用,导 致map.put("1",
		 * list);中的list也指向后面的list内存地址
		 */
		List<String> list = new ArrayList<String>();
		list.add("广州");
		list.add("深圳");
		list.add("惠州");
		list.add("中山");
		list.add("佛山");
		map.put("1", list);
		// System.out.println(list);
		// System.out.println(map.get("1"));
		list = new ArrayList<String>();
		list.add("赣州");
		list.add("南昌");
		list.add("九江");
		list.add("景德镇");
		map.put("2", list);
		list = new ArrayList<String>();
		list.add("杭州");
		list.add("宁波");
		list.add("温州");
		list.add("绍兴");
		map.put("3", list);
		System.out.println(map.get("1"));
		System.out.println(list);

		System.out.println("---------------------------------------------");

		/**
		 * 有个疑问,后面的strs = new ArrayList<String>();会不会改变strs的引用,导 致test.put("1",
		 * strs);中的strs也指向后面的strs内存地址
		 */

		Map<String, List<String>> test = new HashMap<String, List<String>>();
		List<String> strs = new ArrayList<String>();
		strs.add("a");
		strs.add("b");
		strs.add("c");
		map.put("1", strs);
		System.out.println(strs);
		System.out.println(map.get("1"));
		strs = new ArrayList<String>();
		strs.add("e");
		strs.add("f");
		strs.add("g");
		map.put("2", strs);
		System.out.println(strs);
		System.out.println(map.get("1"));

		System.out.println("---------------------------------------------");

		// 内存划分为栈内存(小)和堆内存(大)

		// 值类型
		int i = 10;// 保存在栈内存

		int m = i;// 把值复制给m

		i = 11;

		System.out.println("m=" + m + "i=" + i);

		// 引用类型;除了基本数据类型,数组,String,类
		// 实际内容存在堆,栈里只存对应到堆的地址

		int[] a = new int[] { 1, 2, 3, 4 };
		int[] b = a;// 把对应到堆的地址给了b

		a[2] = 100;

		System.out.println("b[2]=" + b[2]);

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值