一:hashcode()
//表示用于描述其他对象是否等于该对象
.Indicates whether some other object is "equal to" this one.
1. 使用规则
1.1要求在非空的对象上引用实现等价关系
1.2 @param obj the reference object with which to compare.
* @return {@code true} if this object is the same as the obj
* argument; {@code false} otherwise.
这句话意思是如果 object与之比较的对象相等返回true 反之false
1.3每次重写此方法时都必须重写hashcode 以便维护hashcode()方法的常规协定,
该规定相同的对象必须有相同的哈希吗
2:hashcode和equals区别
两者都表示比较相同的对象,equals表示相等那么两个对象一定相等,hashcode表示两
个相等不一定相等,所以说hashcode不太靠谱(大部分数据都是对的),然而equals一
个个去比较太过与麻烦,所以我们一般用hashcode生成的值去比较 不相等时两个数就
不想等,相等的时候再用equals去比较 如果相等那么两个对象就真的相等。
3:使用环境
需要大量数据并且快速对比的时候用hashcode
四:用法
String str = "aa";
String str2 ="aa";
//返回的是true 说明这两个字符串相等
System.out.println(str.hashCode()==str2.hashCode());
Object str1 = str.hashCode();
//输出3104 拿这个值与之比较
System.out.println(str1);
二:equals
1.用于描述两个对象是否相等 ( 比较的是值是否相等)
2.在覆盖equals时应该遵守的规则
非空性(non-nullity) :对于任何非null的引用值x,x.equals(null)必须返回
false。
自反性(reflexive) :对于任何非null的引用值x,x.equals(x)必须返回true。
对称性(symmetric) :对于任何非null的引用值x和y,当且仅当y.equals(x)返回
true时,x.equals(y)必须返回true。
传递性(transitive) :对于任何非null的引用值x、y和z,如果x.equals(y)返回
true,且y.equals(z)也返回true,那么x.equals(z)也必须返回true。
一致性(consistent) :对于任何非null的引用值x和y,只要equals方法所用到的对
象的信息没有发生改变,多次调用x.equals(y)返回的结果就会保持一致
3.使用环境 ,在比较值是否相等的时候使用
4.用法
String str = "aa";
String str2 ="aa";
if (str.equals(str2)) {
System.out.println("这两个字符串相等");
三:clone()方法
表示对象的克隆java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的
如何使用clone()方法对对象进行克隆
Object对象有个clone()方法,实现了对象中各个属性的复制,但它的可见范围是protected的,所以实体类使用克隆的前提是:
① 实现Cloneable接口,这是一个标记接口,自身没有方法。
② 覆盖clone()方法,可见性提升为public。
2.使用场景
在我们上班打卡的时候 每个人签到的时间需要克隆 ,因克隆的对象是不发生变化的 而签到的机器打卡时间是随着每个人打卡而变化的。
四:toString
把建立的对象实例化出来
例如 我们建立一个 students类 包括 姓名 年龄 不加toString显示的是一个字符串
1.
package Test;
/**
* @author Administrator
*/
public class Students {
String name ;
int 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;
}
public Students(String name, int age) {
this.name = name;
this.age = age;
}
public Students() {
}
}
2.调用
public static void main(String[] args) {
Students[] students =new Students[2];
students[0] = new Students("张三",15);
students[1] = new Students("张三",15);
for (int i = 0; i <students.length ; i++) {
System.out.println(students[i]);
}
- 显示结果
加上toString结果
package Test;
/**
* @author Administrator
*/
public class Students {
String name ;
int 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;
}
public Students(String name, int age) {
this.name = name;
this.age = age;
}
public Students() {
}
@Override
public String toString() {
return "Students{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}