目录
4:Object类的equal方法4:Object类的equal方法
1:Java Object 类是所以有类的父类,也就是说Java的所有类都是继承了 object,子类可以使用 Object 的所有方法
package com.lihaozhe.bean;
/**
* Java Object 类是所以有类的父类,也就是说Java的所有类都是继承了 object,子类可以使用 Object 的所有方法
*/
public class Person01 {
private String nickname;
private int age;
private int gender;
public Person01() {
}
public Person01(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
}
测试
package com.lihaozhe.bean;
import org.junit.jupiter.api.Test;
public class Person01Test {
@Test
public void test01(){
Person01 person01 = new Person01();
System.out.println(person01);
}
@Test
public void test02(){
Person01 person01 = new Person01();
System.out.println(person01.toString());
}
}
2:object类的toString方法
public class Person02 {
private String nickname;
private int age;
private int gender;
public Person02() {
}
public Person02(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person02(nickname = " + this.nickname + " , age = " + this.age + " , gender = " + this.gender +")";
}
}
测试
package com.lihaozhe.bean;
import org.junit.jupiter.api.Test;
public class Person02Test {
@Test
public void test01(){
Person02 person02 = new Person02();
System.out.println(person02);
}
@Test
public void test02(){
Person02 person02 = new Person02("小明", 22,1 );
System.out.println(person02);
}
}
3:Object类的hashCode方法
public class Person03 {
private String nickname;
private int age;
private int gender;
public Person03() {
}
public Person03(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
}
package com.lihaozhe.bean;
import org.junit.jupiter.api.Test;
public class Person03Test {
@Test
public void test01(){
Person03 person03 = new Person03();
System.out.println(person03.hashCode());
System.out.println(Integer.toHexString(person03.hashCode()));
System.out.println(person03.toString());
}
@Test
public void test02(){
Person03 person03 = new Person03("小明", 22,1 );
System.out.println(person03);
}
}
4:Object类的equal方法4:Object类的equal方法
package com.lihaozhe.bean;
import java.util.Objects;
public class Person04 {
private String nickname;
private int age;
private int gender;
public Person04() {
}
public Person04(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
@Override
public boolean equals(Object obj) {
// 传进来的比较对象
Person04 person04 = (Person04) obj;
if (this.age != person04.getAge()) {
return false;
} else if (!Objects.equals(this.gender, person04.getGender())) {
return false;
} else if (this.nickname != person04.getNickname()) {
return false;
} else {
return true;
}
}
}
package com.lihaozhe.bean;
import org.junit.jupiter.api.Test;
public class Person04Test {
@Test
public void test01(){
Person04 person01 = new Person04("小明", 22,1 );
Person04 person02 = new Person04("小刘", 20,0 );
System.out.println(person01 == person02);
System.out.println(person01.equals(person02));
//false
//false
}
@Test
public void test02(){
Person04 person01 = new Person04("小明", 22,1 );
Person04 person02 = new Person04("小明", 22,1 );
System.out.println(person01 == person02);
System.out.println(person01.equals(person02));
}
// false
//true
}
5:重写Obje类的hashCode方法
public class Person05 {
private String nickname;
private int age;
private int gender;
public Person05() {
}
public Person05(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
@Override
public boolean equals(Object obj) {
// 传进来的比较对象
Person05 person04 = (Person05) obj;
if (this.age != person04.getAge()) {
return false;
} else if (!Objects.equals(this.gender, person04.getGender())) {
return false;
} else if (this.nickname != person04.getNickname()) {
return false;
} else {
return true;
}
}
@Override
public int hashCode() {
int reference = 20;
return this.age * (this.gender + reference) + this.nickname.hashCode();
}
}
测试
ackage com.lihaozhe.bean;
import org.junit.jupiter.api.Test;
public class Person05Test {
@Test
public void test01(){
Person05 person01 = new Person05("小明" , 40 , 1);
Person05 person02 = new Person05("小刘" , 20 , 1);
Person05 person03 = new Person05("小明" , 40 , 1);
System.out.println(person01.hashCode());
System.out.println(person02.hashCode());
System.out.println(person03.hashCode());
}
}
6:深拷贝与浅拷贝
浅拷贝:指的是你的类本身被拷贝,而没有拷贝的类本身属性中的类。
深拷贝:值得是包含类本身和属性在内的所有类的拷贝。