1、重写 ToString 和 equals 方法1、重写 toString()方法为什么要重写 toString()方法 在 Object 类里面定义 toString()方法的时候返回的对象的哈希 code 码,这个 haxicode 码不能简单明了的表示出对象的属性。所以要重写toString()方法。 当需要将一个对象输出到显示器时,通常要调用他的 toString()方法,将对象的内容转换为字符串.java 中的所有类默认都有一个 toString()方法默认情况下 System.out.println(对象名)或者 System.out.println(对象名.toString()输出
2、的是此对象的类名和此对象对应内存的首地址如果想自定义输出信息必须重写 toString()方法注意事项1.必须被声明为 public2.返回类型为 String3.方法的名称必须为 toString,且无参数4.方法体中不要使用输出方法 System.out.println()2、重写 equals()方法为什么要重写 equals()方法 在 Object 类里面定义的 equals 比较的是对象的引用是否指向同一块内存地址。 一般情况下比较两个对象时比较他的值是否一致,所以要进行重写。重写之后是为了比较两个对象的 value 值是否相等。 特别指出,利用 equals 比较八大包装对象(如
3、 int,float 等)和 String 类(因为该类已重写了 equals 和 hashcode 方法)对象时,默认比较的是值,在比较其它对象都是比较的引用地址。 注意事项重写 equals 必须注意:* 1 自反性:对于任意的引用值 x,x.equals(x)一定为 true* 2 对称性:对于任意的引用值 x 和 y,当 x.equals(y)返回 true,y.equals(x) 也一定返回 true* 3 传递性:对于任意的引用值 x、y 和,如果 x.equals(y)返回 true,并且y.equals(z)也返回 true,那么 x.equals(z)也一定返 回 true*
4、 4 一致性:对于任意的引用值 x 和 y,如果用于 equals 比较的对象信息没有被修改,* 多次调用 x.equals(y)要么一致地返回 true,要么一致地返回 false* 5 非空性:对于任意的非空引用值 x,x.equals(null)一定返回 false3、示例1. 重写前面定义的“Person”类和“Student”类的 toString 及equals 方法,并编程测试。程序如下:class Person int i;Person()Person(int i)this.i=i;public String toString() return “我叫 Mary“;public
5、 boolean equals(Object obj)Person p1=(Person) obj;if(this.i=p1.i)return true;elsereturn false;class Student extends Person int x,y;Student(int x,int y )this.x=x;this.y=y; public String toString() return “我是计算机系计科 09 级学生“;public boolean equals(Object obj)Student s1=(Student) obj;if(this.i=s1.i)return
6、 true;elsereturn false;public class TestPerson public static void main(String args) Person p1=new Person(2);Person p2=new Person(2);Student s1=new Student(3,4);Student s2=new Student(3,4);System.out.println(p1.equals(p2);System.out.println(s1.equals(s2);System.out.println(p1);System.out.println(s1);
7、运行结果:2根据上面的程序,构造“Teacher”类,继承“Person”类,要求:(1)增加“职称(String) ”属性;(2)具有和“Student”类类似的构造重载方法;(3)重写“Person”类的 info()方法,增加“职称”信息。程序如下:class PersonString name;long id;int age;Person()Person(String name ,long id,int age)this.name=name;this.id=id;this.age=age;void info()System.out.println(“我的信息是:“+“姓名=“+name
8、+“; “ +“证件号=“+id+“; “ +“年龄=“+age);class Teacher extends PersonString name;long id;int age;String profession;Teacher(String _name,long _id,int _age,String profession)name=_name;id=_id;age=_age;this.profession=profession;void info()System.out.println(“我的信息是:“+“姓名=“+name+“; “ +“证件号=“+id+“; “ +“年龄=“+age+“; “ +“职称=“+profession);public class TestPerson2public static void main(String args)Person p1=new Person(“张三“,65780,25);Teacher t1=new Teacher(“王宇“,23790,27,“讲师“);p1.info();t1.info();运行结果: