今天复习字符串时候又想到了toString方法,感觉蛮重要的,贴一段代码先。
public class StudyToString {
String id;
public StudyToString(String id) {
this.id=id;
}
// public String toString() {
//
//
// return id;
// }
public static void main(String[] args) {
StudyToString st=new StudyToString("2");
System.out.println(st);
}
}
这样打印的结果是
ProducerConsumer.StudyToString@74904497代表包名.类名@地址形式
当把代码取消注释后结果是:2
很神奇,为什么加上tostring会这样呢?
toString
public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
toString 是源自java Object类,在Object 内 定义为:返回 一个 类名@hashcode的字符串,可以overridden 用来返回 你认为有用的信息, toStrng 没有arguments override:public String toString(){ // insert you code return "informations" } 因为在java中 Object类是基类,所以每个类都会有toString方法。 System.out.println(Object)实际上就是调用 object的toString方法。 我们用的比较多的就是 String类的toString 方法,String类重写了Object的toString方法,用于返回String的字符串值。
Java中,数据类一般都要重载toString()方法,如果没有重载该方法就相当于犯了编程的大忌。下面来说说该方法的使用。
toString()方法是object里面的方法,而所有类都继承自object,所以所有对象都有这个方法。特别是在使用System.out.println(xx)这样的语句时,如果“xx”不是String类型,就会调用“xx”对象的toString()方法。
这个方法是干什么的呢?
java输出用的函数print();是不接受对象直接输出的,只接受字符串或者数字之类的输出。那么你想把一个创建好的对象拿来输出怎么办?例如:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
会得到输出:this is A
按照print接受的类型来说,obj是不能直接输出的,那么是否代表这个是不能编译运行的呢?当然不是。因为当println检测到输出的是一个对象而不是字符或者数字时,那么它会去调用这个对象类里面的soString 方法。
即使你没有创建,因为是所有的类都是集成object类,所以自然也继承了这个方法。所以默认情况下,你输出一个对象,会调用这个对象继承的toString方法,而object里的这个方法,默认的功能是返回这个对象的名称。