1 class Stu{
 2     private String name = null;
 3     private int age = 0;
 4     
 5     public Stu(String name, int age){
 6         this.name = name;
 7         this.age = age;
 8     }
 9     //覆写Object中的equals方法
10     public boolean equals(Object obj){
11         if(this == obj){
12             return true;
13         }
14         if(!(obj instanceof Stu)){
15             return false;
16         }
17         Stu stu = (Stu)obj;
18         if((stu.age == this.age) && this.name.equals(stu.name)){
19             return true;
20         }
21         return false;
22     }
23     //覆写Object中的hashCode方法
24     public int hashCode(){
25         return this.name.hashCode() * this.age;
26     }
27 }
28 public class Main {
29     public static void main(String[] args){
30         System.out.println(new Stu("Xiaobiqiang", 21));
31         System.out.println(new Stu("Xiaobiqiang", 21));
32     }
33 }

 

运行结果:

cheakObjIsEqual.Stu@f87ecac
cheakObjIsEqual.Stu@f87ecac

因而当内容完全相同时,new Stu并不会分配另外空间,猜想hashCode决定了new运算是否会分配新空间

验证猜想:把equals方法注释掉

class Stu{
	private String name = null;
	private int age = 0;
	
	public Stu(String name, int age){
		this.name = name;
		this.age = age;
	}
	//覆写Object中的equals方法
	/*
	public boolean equals(Object obj){
		if(this == obj){
			return true;
		}
		if(!(obj instanceof Stu)){
			return false;
		}
		Stu stu = (Stu)obj;
		if((stu.age == this.age) && this.name.equals(stu.name)){
			return true;
		}
		return false;
	}
	*/
	//覆写Object中的hashCode方法
	public int hashCode(){
		return this.name.hashCode() * this.age;
	}
}
public class Main {
	public static void main(String[] args){
		System.out.println(new Stu("Xiaobiqiang", 21));
		System.out.println(new Stu("Xiaobiqiang", 21));
	}
}

  运行结果:

cheakObjIsEqual.Stu@f87ecac
cheakObjIsEqual.Stu@f87ecac

修改输入的信息为:

1 public class Main {
2     public static void main(String[] args){
3         System.out.println(new Stu("Xiao", 21));
4         System.out.println(new Stu("Xiaobiqiang", 21));
5     }
6 }

运行结果:

cheakObjIsEqual.Stu@36962eb
cheakObjIsEqual.Stu@f87ecac

结果应该是hashCode决定了new运算是否会分配新的空间