JAVA 等号赋值简析

import java.util.ArrayList;
import java.util.HashMap;


public class AssignTest {
	
	/**
	 * @param args
	 */
	@SuppressWarnings("serial")
	public static void main(String[] args) {
		/*========first test (类和基本类型)==========*/
		Integer a = 10;
		Integer b = a;
		a = 5;
		
		String a1= "test";
		String b1 = a1;
		a1 = "123";
		System.out.println("b(10):" + b + "\nb1(test):" + b1);
		/*输出的数据为b(10):10 b1(test):test 说明基本数据类型传的值*/
		Person p = new Person();
		p.name = "wangwu";
		Person s = p;
		s.name = "zhaosan";
		System.out.println("Person p(wangwu):" + p.name);
		/*输出数据为:Person p(wangwu):zhaosan */
		ID i = new ID();
		i.id = 1;		
		ID d = i;
		d.id = 3;
		System.out.println("ID i(1):" + i.id);
		/*输出数据为:ID i(1):3*/
		
		String s1 = new String("one");
		String s2 = s1;
		s1 = "two";
		System.out.println("s2(one):" + s2);
		/*输出的数据为:s2(one):one*/
		
		//总结:自我构建的类,通过等号赋值时,传递指针,因此对赋值的对象修改,被赋值的对象内容也发生改变;
		//基本的数据类型,传递值。
		
		/*=========second test(容器和类中类对象赋值)=========*/
		ArrayList<String> arrStr = new ArrayList<String>();
		arrStr.add("one");
		arrStr.add("two");
		arrStr.add("three");
		
		ArrayList<String> arrStr1 = new ArrayList<String>();
		ArrayList<String> arrStr2 = new ArrayList<String>();
		arrStr1 = arrStr;
		arrStr2 = arrStr1;
		
		arrStr.add("four");
		System.out.println("attStr1(four):" + arrStr1 + "\n" + "attStr2(four):" + arrStr2);
		/*输出的数据为:
		 * attStr1(four):[one, two, three, four]
		 * attStr2(four):[one, two, three, four]
		 * */
		arrStr2.add("five");
		System.out.println("arrStr1(five):" + arrStr1 + "\n" + "arrStr(five):" + arrStr);
		/*输出的数据为:
		 * arrStr1(five):[one, two, three, four, five]
		 * arrStr(five) :[one, two, three, four, five]
		 * */
		
		Student stu = new Student();
		Person p_1 = new Person();
		stu.p = p_1;
		stu.p.name = new String("xiaoming");// = "xiaoming";
		System.out.println("p_1.name:" + p_1.name);
		/*输出数据为:p_1.name:xiaoming*/
		stu.id = 3;
		p_1.name = new String("xiaohong");//= "xiaohong";
		
		Person p_2 = new Person();
//		p_1 = p_2;//p_1存p_2 的地址 与 stu.p 存的是不同地址
		p_2 = p_1;//p_2 存p_1的地址 与stu.p 存的是相同地址
		p_2.name = new String("laoshi");//= "laoshi";
		System.out.println("stu.person.name:" + stu.p.name + "\r" + "p_1.name:" + p_1.name);
		/*输出数据为:stu.person.name:xiaohong  p_1.name:laoshi (p_1 = p_2)*/
		/*输出的数据为:stu.person.name:laoshi p_1.name:laoshi (p_2 = p_1)*/
		p_1.name = "FUCK";
		System.out.println("stu.person.name:" + stu.p.name + "\r" + "p_2.name:" + p_2.name);
		/*输出的结果为:stu.person.name:xiaohong  p_2.name:FUCK (p_1 = p_2)*/
		/*输出的结果为:stu.person.name:FUCK p_2.name:FUCK (p_2 = p_1)*/
		
		//总结类和容器等号赋值时,传递是指针,当等号两边的任意一边做出修改另一个值也发生变化。
		//当等号两边任意一边的存的地址发生变化,另一边则保存一份原有的地址,两者将失去联系;
		
		/*============ third test (容器传值)===========*/
		ArrayList<String> arrTest = new ArrayList<String>();
		arrTest.add("111");
		arrTest.add("222");
		
		ArrayList<String> arrTest_1 = new ArrayList<String>(arrTest);//方法一
		
		arrTest_1.add("333");
		System.out.println("arrTest_1:" + arrTest_1 + "\narrTest:" + arrTest);
		/*输出的结果为: arrTest_1:[111, 222, 333] arrTest:[111, 222]*/
		@SuppressWarnings("unchecked")
		ArrayList<String> arrTest_2 = ( ArrayList<String>)arrTest.clone();//方法二
		arrTest.add("444");
		System.out.println("arrTest_2:" + arrTest_2 + "\narrTest" + arrTest);
		/*输出的结果为:arrTest_2:[111, 222] arrTest[111, 222, 444]*/
		
		ArrayList<HashMap<Integer, String>> mapInArr = new ArrayList<HashMap<Integer, String>>();
		HashMap<Integer, String> map = new HashMap<Integer, String> (){{
			put(1, "ONE");
			put(2, "TWO");
			}};
			
		mapInArr.add(map);
		
		ArrayList<HashMap<Integer, String>> temp = new ArrayList<HashMap<Integer, String>>(mapInArr);
		temp.add(new HashMap<Integer, String>(){{
			put(3, "THREE");
			put(4, "FOUR");
		}});
		
		System.out.println("temp: " + temp + "\nmapInArr" + mapInArr);
		/*输出的结果为: temp: [{1=ONE, 2=TWO}, {3=THREE, 4=FOUR}] mapInArr[{1=ONE, 2=TWO}]*/
	}

}
class Person{
	String name;
}

class ID{
	int id;
}

class Student{
	Person p;
	int id;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值