黑马程序员技术交流社区
标题:
集合疑问
[打印本页]
作者:
空心祭
时间:
2014-3-18 09:26
标题:
集合疑问
在看视频的时候发现一个问题,到现在没有想明白...
那就是集合里面传入的类,直接迭代打印出来的是类对应的地址值
那么为什么字符串打印出来的直接就是字符串呢?而建立别的类比如学生等出来的都是地址值啊
为什么字符串直接就出来字符串了,而不是地址值呢?
作者:
虎牛龙马
时间:
2014-3-18 09:59
package cn.itcast.day7;
import java.util.ArrayList;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p = new Person();
List list = new ArrayList();
list.add(p);
list.add("abc");
System.out.println(list.get(0));
System.out.println(list.get(1));
}
}
class Person {
}
结果:
cn.itcast.day7.Person@4f1d0d
abc
你是这个意思吧!
你是在集合里面传入的类的具体实例的引用对象吧!一个引用对象本来就是一个地址,你在打印它的时候会自动调用toString()方法,结果就是一个地址;而如果传入的是一个字符串,比如“abc”,它是一个字符串的实体对象,在打印它的时候也默认调用toString()方法,结果就是abc。
作者:
张贺
时间:
2014-3-18 10:04
在自定义类里面重写Object类提供的toString方法就可以实现你想输出的内容!
作者:
yunzhongzhuhuo
时间:
2014-3-18 10:06
所有类都默认是java.lang包中的Object类的子类或间接子类。Object类中有一个public方法public String toString(),一个对象通过调用该方法可以获得该对象的字符串表示。一个类可以通过重写toString()方法来获得该类的对象想要的字符串表示。如java.util包中的Date类就重写了toString()方法,使得Date对象调用toString()方法得到的字符串是有日期信息组成的字符序列。如果一个类没有重写toString()方法,那么该类所创建的对象调用toString()方法得到的字符串格式为:
类型@对象的引用
而String重写了toString()方法,输出的就是其值
import java.util.Date;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date=new Date();
String str="abced";
Student2 stu=new Student2("zhangsan",55);
TV tv=new TV("电视机",555);
System.out.println(date);
System.out.println(str);
System.out.println(stu);
System.out.println(tv);
}
}
class Student2{
String name;
double score;
Student2(String name,double score){
this.name=name;
this.score=score;
}
public String toString(){
return "姓名:"+name+",分数"+score;
}
}
class TV{
String name;
double price;
TV(String name,double price){
this.name=name;
this.price=price;
}
}
复制代码
QQ截图20140318100507.png
(1.59 KB, 下载次数: 7)
下载附件
2014-3-18 10:06 上传
作者:
Alexander
时间:
2014-3-18 11:17
本帖最后由 Alexander 于 2014-3-18 11:19 编辑
一般来说,对象默认的都有toString()方法,即打印该对象的信息,如果系统没有对toString()方法进行重写,那么打印出的形式为:对象类型@对象的引用像你说的String类型的toString方法已经实现了
public String toString(){}
This object (which is already a string!) is itself returned
Returns:the string itself//上面的提示是说,这个对象返回值是它本身
那么就是说,如果该对象的toString()方法没有重写,那么就是按照系统默认的方式,在打印该对象时调用的是toString()方法就呈现出默认形式:对象类型@对象的引用
如果想以自己的方式打印一个对象,就要重写该对象的toString()方法了例如:定义一个Person对象,并重写其toString()方法
class Person {
String name; int age;
Person(String name, int age) {
this.name = name; this.age = age;
}
public String toString() {
return "name:" + name + "---age:" + age;
}
}
public class PersonTest {
Person p = new Person("花花", 23);
System.out.println(p);
}
打印结果为:name:花花---age:23
作者:
osully
时间:
2014-3-18 11:30
Object类中的toString方法中写的其实也很清楚
建议所有子类都重写此方法。
也就是说
重写了此方法,你写什么打印什么
否则就调用了Object的toString()
getClass().getName() + '@' + Integer.toHexString(hashCode())
作者:
房建斌
时间:
2014-3-18 11:51
toString()方法的问题啊,你自己写一个学生类,把toString重写了就行了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2