A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们在输出变量名、对象名、数组名时有时会得到地址,有时会得到内容,那么,这个有什么有什么规律呢?
今天我主要跟大家分析JAVA基础学习阶段目前已经遇到的最复杂的一类,就是自定义类的对象作为ArrayList<E>的元素时的情况。
如下代码:
//查看自定义Student类的地址关系
ArrayList<Student> stuList = new ArrayList<Student>();
Student stu1 = new Student("琳琳", 18);
Student stu2 = new Student("Tom", 20);
stuList.add(stu1);
stuList.add(stu2);

//直接打印ArrayList类的对象名stuList得到
System.out.println(stuList);//[cn.itcast.day07.demo05.Student@75412c2f, cn.itcast.day07.demo05.Student@282ba1e]

//用ArrayList类的对象名引用get方法并打印得到
System.out.println(stuList.get(0));//cn.itcast.day07.demo05.Student@75412c2f

//直接打印ArrayList类的对象名stuList得到
System.out.println(stu1);//cn.itcast.day07.demo05.Student@75412c2f
System.out.println(stu2);//cn.itcast.day07.demo05.Student@282ba1e


===============================================================
//查看引用String类型的地址
ArrayList<String> strList = new ArrayList<>();
strList.add("one");
strList.add("two");

//直接打印ArrayList类的对象名strList得到
System.out.println(strList);//[one, two]

//用ArrayList类的对象名引用get方法并打印得到
System.out.println(strList.get(0));//one
System.out.println(strList.get(1));//two

从结果中我们可以看出:
1、        当用String作为泛型的类型时,打印得到的直接是内容;
2、        当用自定义类作为泛型的类型时,得到的都是地址,也就是说,此时ArrayList类的对象stuList中储存的都是一系列的地址值。这一点与我们之前学到的,当生命一个类的实例化对象时,对象名储存的是地址值这一点是一致的。
3、        以上两点的差异原因在于,String类的成员方法对print重新做了定义,理论上将这样的方法应用于我们自定义的类应该会得到同样的效果。
       

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马