JAVA 等号赋值简析

来源:互联网 发布:中国芯片 知乎 编辑:程序博客网 时间:2024/05/21 11:19
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;}
0 0
原创粉丝点击