Object类
类中的方法
hashCode()/toString()/equals()这三个方法时我们今后在做项目时经常要调用的方法,尤其是在编写一个标准的Java类之后,我们常常重写这三个方法,标准的Java类又称为JavaBean,
JavaBean的要求:
1.所有成员变量的访问权限:private
2.为每一个成员变量设置一对getter和setter
3.设置一个无参数和全参构造
Person类
package SE01.n1Object;
public class Person {
private String name;
private int age;
public String getName() {//为属性设置getter和setter
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {//有参构造
super();
this.name = name;
this.age = age;
}
public Person() {//无参构造
super();
}
@Override
public String toString() {//重写toString
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {//重写hashCode
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {//重写Equals
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
Test类
public static void main(String[] args) {
Person p=new Person("王五",12);
System.out.println(p.toString());
p.setName("张三");
p.setAge(123);
System.out.println(p.toString());
System.out.println(p.getAge());
System.out.println(p.getName());
System.out.println(p.hashCode());
System.out.println(p);
/*
* 看一个类是否重写toString,直接打印这个类的对象即可,如果没有重写toString(),那么打印的是对象的
* 类文件名全称@十六进制哈希吗
*
*/
Scanner sc=new Scanner(System.in);
System.out.println(sc);
//重写toString
Random r=new Random();
System.out.println(r);
//没有重写toString
ArrayList list=new ArrayList();
list.add(1);
list.add(2);
System.out.println(list);
//重写toString
}
Equals方法
package SE01.n1Object;
public class Demo02Equals {
Person p1=new Person("小明",18);
Person p2=new Person("小白",19);
Person p3=new Person("小明",18);
public static void main(String[] args) {
Demo02Equals d=new Demo02Equals();
System.out.println(d.p1.equals(d.p2));//false
System.out.println(d.p1.equals(d.p3));//true
Person p1=new Person("小明",18);
Person p2=new Person("小白",19);
Person p3=new Person("小明",18);
System.out.println(p1.hashCode());//hashCode=758222
System.out.println(p3.hashCode());//hashCode=758222
//由于Person类重写了hashCode()方法,所以p1和p3的hashCode值相等
System.out.println(p1.equals(p2));//false
System.out.println(p1.equals(p3));//true
//由于Person类重写了equals()方法,当两个引用的属性完全相同的时候,会返回true
//默认是比较地址是否相同,很多时候并不符合业务需求,需要重写
// ▲equals()和==的区别
// ==可以用于比较基本数据类型的值(最小数据单元)
// (对于基本数据类型:相同就是相等,相等就是相同)
System.out.println(p1==p1);//true
System.out.println(p1.equals(p1));//true
// equals()只能比较两个对象是否相等
// (对于引用数据类型,相等不一定相同)
System.out.println(p1==p3);//false
System.out.println(p1.equals(p3));//true
}
}