hashcode方法
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class TestStudent {
public static void main(String[] args) {
Student num1 = new Student("Luffy",19);
Student num2 = new Student("Zuolo",22);
Class classnum1 = num1.getClass();
Class classnum2 = num2.getClass();
if (classnum1==classnum2){
System.out.println("寻找宝藏");
}else {
System.out.println("寻找敌人");
}
System.out.println("---------------------------------------");
System.out.println(num1.hashCode());
System.out.println(num2.hashCode());
Student num3 = num1;
System.out.println(num3.hashCode());
}
}
- 如图所示,前面是我的getClass方法,在后面,直接输出hashcode就会直接输出它的哈希值
- 返回改对象的哈希码值
- 哈希值根据对象的地址或字符串或数字使用hash算法算出来int类型的数值
- 一般情况下相同对象返回同一个哈希码值
toString方法
- 返回该对象的字符串表示(表现形式)
- 可以根据程序的需求覆盖此方法,如展示各个对象属性值
System.out.println(num1.toString());
System.out.println(num2.toString());
具体根据hashcode里面的东西参照
- 就是这样,他只会输出一个类似地址的东西,这个东西对我们来说没有意义,所以不满足我们的需求,因此我们需要重写toString方法
@Override
public String toString() {
return name+":"+age;
//这是另外一个类,我就直接复制了
System.out.println(num1.toString());
System.out.println(num2.toString());
就是这样!直接输出他们的具体属性值,符合我们的需求
equals方法
- 默认实现为:(this==obj)比较两个对象的地址是否相同
*** 可进行覆盖,比较两个对象的内容是否相同***
注意:返回的都是布尔值
Student num5 = new Student("娜美",19);
Student num6 = new Student("娜美",19);
System.out.println(num5.equals(num6));
- 因为在这里,开辟了两个不一样的空间,自然访问地址都不一样,所以就是false
- 那我们如果想返回的是true,也就是只比较里面的内容的话,就要重写equals方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (obj instanceof Student) {
Student s = (Student) obj;
}
if (this.name.equals(getName())&&this.age==getAge()) {
return true;
}
else {
return false;
}
}
Student num5 = new Student("娜美",19);
Student num6 = new Student("娜美",19);
System.out.println(num5.equals(num6));
- true
- 因为前面写了个有参构造,并且也已经在对象名后赋值过了,所以这里要用get方法直接取值