java 中equls tostring重写的问题,在线等
java中 自定义的类中,有时需重写equls tostring 有时不需重写,
这是怎么区别的呀,
thanks
------解决方案--------------------对象的toString 默认 getClass().getName() + '@' + Integer.toHexString(hashCode()) ,当你不想要这结果的时候你就重写呗。
一样的道理,当你不想用默认的equal来比较的时候,就重写喽
------解决方案-------------------- @Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
------解决方案--------------------刚学java吧
equls tostring是Object类的方法,所有自定义的类都默认继承Object
重不重写看你自己设计的类的需要咯,有必要就重写,例如我要打印一个Person类的对象,系统会默认的调用它的toString方法,如果你的Person类重写了个方法,虚拟机就调用你Person类中的这个方法,如果没有,就调用Object的toString
在你自己定义的这个toString方法里,你可以写你想要的东西,返回一个String就OK 例如:person的toString里面返回Person的年龄和姓名:
Java code
public String toString(){
return "姓名:"+this.getName()+",年龄:" + this.getAge();
}
------解决方案--------------------
主要看你的需求。
比如调用LIST的contains()方法时候,他会遍历成员进行equals()方法的判断,但是object的默认这个方法实际上比较的是内存地址,也就是物理上同一个对象。
有时候,我们需要比较的是概念上的同一个对象,并不关心物理存储上是否有区别,这个时候你需要重写LIST的成员类型的equals()方法,一般是反射出来属性,循环遍历每个属性的值是否一致,也就是等同于基本数据类型的==运算。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
就是看你有没有需要改变类的默认实现方式
toString()就是当你写System.out.println(类对象)时输出的内容,有需要就可以改写,不改就按默认输出
同理equals()也是一样,当你比较两个对象有没有特别的要求要改变比较方法,有的话就重写,不重写就按默的方法比较,还有重写的话最好连hasCode()也一起重写,这样保证当相同对象比较时是true