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;
}
JAVA 等号赋值简析
最新推荐文章于 2023-06-14 16:07:50 发布