java equals和tostring
Object类概述
是所有类中的父类,最大的超类,所有的类都继承他。
equals方法
比较2个对象是否相同,其实他是在比较两个对象的地址是否相同,在equals方法中我们用==来判断
但是比较2个地址相同实在没有什么意义,实际开发中我们可能会比较2个对象的属性是否一样,所以我们会在类中重写equals方法再调用
注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。
比较2个人的年龄是否相同:
- 1 package com.orcale.demo01;
- 2
- 3 public class Person {
- 4 private String name; //首先定义人的属性年龄和名字
- 5 private int age;
- 6 public String getName() {
- 7 return name;
- 8 }
- 9 public void setName(String name) {
- 10 this.name = name;
- 11 }
- 12 public int getAge() {
- 13 return age;
- 14 }
- 15 public void setAge(int age) {
- 16 this.age = age;
- 17 }
- 18 //判断是否是同龄人
- 19 public boolean equals(Object obj) { //重写equals方法,形参传object类,父类的类型多态的 obj是传进来的一个地址,p2的地址。
- 20 if(obj==this){ 判断一下传进来的地址是不是一样,如果是传一个p1,那就是p1==p1,不用再判断了就是ture
- 21 return true;
- 22 }
- 23 if(obj instanceof Person){ //先判断一下是不是传进来的obj是不是Person类,如果不是直接返回false,如果是就进方法体。
- 24 //向下转型 //因为是父类,但是我们要判断Person年龄属性,我们要把父类转换到子类,强转子类,然后判断
- 25 Person p =(Person)obj;
- 26 return this.age == p.age;
- 27 }
- 28 return false;
- 29 }33 }
- 34 }
- 1 Person p1 =new Person();
- 2 p1.setAge(28);
- 3 Person p2 =new Person();
- 4 p2.setAge(30);
- 5 //调用equals()方法,
- 6 //如果Person没有重写object子类,那就是调用objeck中的方法
- 7 //比较的是两个对象的内存地址,没有意思。Person类如果要比较年龄是否相同
- 8 //就要重写父类的equals方法
- 9 boolean b = p1.equals(p2); //调用equals方法赋值给b
- 10 System.out.println(b);
判断一下汽车的颜色是否一样
- 1 package com.orcale.demo01;
- 2
- 3 public class car {
- 4 private String color;
- 5 private int lunzi;
- 6 public String getColor() {
- 7 return color;
- 8 }
- 9 public void setColor(String color) {
- 10 this.color = color;
- 11 }
- 12 public int getLunzi() {
- 13 return lunzi;
- 14 }
- 15 public void setLunzi(int lunzi) {
- 16 this.lunzi = lunzi;
- 17 }
- 18 public boolean equals(Object a){
- 19 if(this==a){
- 20 return true;
- 21 }
- 22 if(a instanceof car){
- 23 car c =(car)a;
- 24 return this.color==c.color;
- 25 }
- 26 return false;
- 27
- 28 }
- 29 }
- car c1 =new car();
- c1.setColor("红色");
- car c2 =new car();
- c2.setColor("绿色");
- boolean b =c1.equals(c2);
- System.out.println(b);
toString方法
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
- package com.orcale.demo01;
- public class dog {
- private String name;
- private String color;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getColor() {
- return color;
- }
- public void setColor(String color) {
- this.color = color;
- }
- public String toString(){ 重写toString方法,返回名字+颜色
- return name+"\t"+color;
- }
- }
- 1 dog d1 = new dog();
- 2 d1.setColor("白色");
- 3 dog d2 =new dog();
- 4 d2.setColor("黑色");
- 5 String d =d1.toString();
- 6 System.out.println(d1);
- 7 System.out.println(d2);