黑马程序员技术交流社区
标题:
toString() 方法疑惑求解!!!
[打印本页]
作者:
聖手`书生
时间:
2013-4-23 20:58
标题:
toString() 方法疑惑求解!!!
我们都知道,java的Object提供了个toString方法,返回该对象的字符串表示。
而String类中已经复写了该方法,返回String对象本身;所以我们调用String类对象时,直接打印String类对象的引用就可以打印该字符串对象。
从我学习的经验来看,如果某个类复写了toString()方法,那么打印该类对象的引用,就可以直接输出toString方法的返回值。
问:我这样理解是否正确??给点意见哈。
作者:
wangyougu010
时间:
2013-4-23 21:02
这个得看情况,如果是自定义类对象,那么重写toString后,可以选择返回自定义对象的某些属性,比如,自定义了Persson类,有学号id,姓名name这两个属性,这个时候如果直接打印Person类的对象,输出的会是Person类名跟地址。
作者:
张洪慊
时间:
2013-4-23 21:05
当你用System.out.println(对象)时:
(API)
用的是:public void println(Object x)
打印 Object,然后终止该行。此方法首先调用
String.valueOf(x)
获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。
而String类中:
static String valueOf(Object obj)
如果参数为 null,则字符串等于 "null";否则,返回
obj.toString()
的值。
obj.toString():调用了你传入的对象所属类的toString()方法,该方法从 Object继承/被复写.
作者:
breeze
时间:
2013-4-23 22:04
如果重写了toString()会返回一个期望的字符串, 如果不重写, 返回的是 类名@hashCode()
class Test {
public static void main(String[] args) {
Student s = new Student("张三", 14);
//就是将对象信息以字符串的形式打印, 其实就是自定义的的toString()方法
System.out.println(s); //这里的s其实就是s.toString();
}
}
class Student {
String name;
int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
//重写toString()
public String toString() {
//这里可以返回任意一个字符串, 但是一般返回的是这个对象的属性信息
return "姓名: " + this.name + " 年龄: " + this.age;
}
}
作者:
Miss小强
时间:
2013-4-24 14:16
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
复制代码
我们知道System。out是PrintStream的对象。println方法的源代码就是上面那个;
String的valueOf的源代码是这个:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
复制代码
在看Object的toString源代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这样应该一目了然了吧,源代码都是这样的了,还能有错嘛,就是你说的那样;
如果是空就打印null,如果out.println(obj);obj覆盖了toString的方法就调用它,输出他的返回值;
如果没有就用父类Object的返回值;
作者:
xiewen
时间:
2013-4-26 10:30
你这样理解非常正确。
作者:
hmr8
时间:
2013-5-1 10:11
这是多的,这就是多态的特性!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2