toString方法和print
print输出会自动调用toString方法,如果没有重写,则会调用Object类的toString方法,返回对象名@一串字符(哈希值?),所以对于要使用print输出的对象一般需要重写toString方法。
package how2j_arraylist;
import java.util.ArrayList;
public class newarraylist {
public static void main(String[] args) {
ArrayList ary = new ArrayList();
ary.add(new heros("盖伦"));
System.out.println(ary);//println自动调用toString方法,如果没重写,调用object类的,输出哈希值;所以一般要重写toString方法
//ary.add("亚索");
//System.out.println(ary);//ArrayList
}
}
注释部分,直接添加字符串,字符串类重写过toString方法,所以不需要自己写,可直接出书字符串
heros类,类中未重写toString方法
package how2j_arraylist;
public class heros {
private String name;
private double hp = 100;
private int damage;
public heros() {
}
public heros(String name) {
this.name = name;
}
}
重写toString方法
package how2j_arraylist;
public class heros {
private String name;
private double hp = 100;
private int damage;
public heros() {
}
public heros(String name) {
this.name = name;
}
public String toString() {
return name+hp;
}
}
ArrayList的toString方法
由输出可以看到,结果中有"[“和”,",猜测是ArrayList的toString方法。
ArrayList类的声明
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
继承自AbstractList
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
继承自AbstractCollection
在AbstractCollection中重写了toString方法,打开源码可以看到
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}