黑马程序员技术交流社区
标题:
关于对象的toString
[打印本页]
作者:
Cheers_for_CRAZ
时间:
2013-12-30 14:51
标题:
关于对象的toString
本帖最后由 Cheers_for_CRAZ 于 2013-12-30 22:26 编辑
System.out.println(new String());为什么打印值为空,它不是一个对象吗,打印的应该是hashcode值呀?
System.out.println();会调用toString()方法,但是toString()方法到底是哪个类中的toString()方法?
在遍历Object数组的时候,怎么知道里面的值是什么,那么这时候又是怎么判断里面元素的类型的呢?
也就是说这是侯打印会调用哪个里面的toString()方法呢?
作者:
布鲁Go
时间:
2013-12-30 15:17
本帖最后由 布鲁Go 于 2013-12-30 15:35 编辑
String类中 String()的构造方法是这样描述的: 初始化一个新创建的 String 对象,使其表示一个空字符序列。所以,第一打印空字符串。
至于toString() 是这样。如果本身这个类没有复写过object的toString()方法。那就都是调用Object中的toString()方法。。如果复写过了,那就调用自己的。。自己有就用自己的,没有就用父亲的。按你的描述试着写了个Object数组代码:
import java.util.*;
class Demo {
public static void main(String[] args)
{
Object[] obj =new Object[5];
obj[0] =new ArrayList();
obj[1] ='b';
obj[2] ="dfafa";
obj[3] =new int[3];
obj[4] =1;
for (int i=0;i<5 ;i++ )
{
System.out.println(obj[i]);
}
}
}
复制代码
答应结果如下:
[]
b
dfafa
[I@5e1077
1
貌似除了数组,其他基本都是打印自己内容的。。感觉数组算比较特别,
new int[3],你看,后面不带(),不是自己用构造方法搞出来的,所以就打印了内存地址。其他对象一般要自己弄个构造方法搞出来,一出来在堆内存中就有初始化值了,很多默认为空参数。引用数据类型有三种,类类型,接口类型,数组类型,感觉就数组比较特别,当然,只是个人理解。不敢保证对,希望对你有用。
作者:
任亚俊
时间:
2013-12-30 16:54
String重写了toString方法,只有没重写toString方法的类,才会打印hashcode值。
作者:
李兴
时间:
2014-1-2 18:36
System.out.println(new String())中调用的toString()方法是String类型复写的Object类的toString()方法,
集合元素判断元素类型可以使用instanceof关键字,如下
Object[] objs = {"a","sf","asf"};
for(Object obj : objs)
{
if(obj instanceof String)
{
String s = (String)obj;
System.out.println(s);
}
}
这里面就是调用了String复写自Object的toString()方法
作者:
午夜b'Boy
时间:
2014-1-3 18:12
System.out.println();会调用println语句中接收的对象的toString()方法,object的toString()方法是打印hashcode值,但编写一个自己的类时,如果复写了toString()方法,打印他时调用的就是你复写的toString代码了,当然String类的toString()方法是被复写过了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2