==表示相等,也就是说是一个,例如你跟你自己那是==,而equals表示相同,也就说长的像未必是一个,如你跟你的双胞胎弟弟,其他具体区别如下
==是比较内存地址的,跟hashcode没关系
equals具体的实现具有具体的不同
String equals源码如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
直接比较其内部的每个字符
其他的可以自己覆盖实现
那么hashcode是用来做什么的呢?
hashcode主要是针对hashmap,hashset之类的hash比较其是否相同,查看HashMap的判断是否包含就是根据hashcode进行判断的源码如下:
final Entry<K,V> getEntry(Object key) {
int hash = (key == null) ? 0 : hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
}
return null;
}
首先判断hash是否相等,然后再判断equals方法
那么到底hashcode有什么作用呢?
分享到:
相关推荐
本资源摘要信息涵盖Java基础知识点,主要涉及Java中的数据类型、equals和hashCode方法、基本数据类型和引用类型的区别、多态的理解、String、StringBuffer和StringBuilder的区别等。 1. Java中==和equals和hashCode...
发电机通用生成器插件,用于生成高效且紧凑的... 右键单击包资源管理器中的 java 文件或右键单击 java 编辑器选择选项等于和哈希码选择要用于生成 equals 和 hashcode 的变量单击确定。 :)支持的Eclipse 3.5 或更高版本
java中==和equals和hashCode的区别 1)基本数据类型,也称原始数据类型byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2) 引用类型(类、接口、数组) 当他们用...
- **数据类**:数据类是一个设计用来存储数据的类,它们有自动生成的equals、hashCode、toString、componentN和copy函数。 - **密封类**:密封类是一种限制类继承结构的类,确保所有子类都定义在同一个文件中。 - **...
编译器会自动为数据类生成常见的方法,如`toString()`、`equals()`、`hashCode()`和`componentN()`函数,用于操作类的主要构造器参数。数据类让数据存储和管理变得更加简洁。 9. 等号运算符重载:Kotlin允许通过...
- **数据类声明**:自动提供 `equals()`, `hashCode()`, `toString()` 等方法。 ##### 5.3 密封类 - **密封类声明**:限制子类的数量,并提供模式匹配功能。 ##### 5.4 泛型 - **泛型声明**:使用 `<T>` 指定类型...
如有必要,重写Object类中hashCode 和equals •缓存实例的不可变类:如果程序经常需要使用不可变类的实例,则可对实例进行缓存。 抽象方法和抽象类 •抽象方法和类都必须使用abstract来修饰,有抽象...
10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再...
10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再...