equals、hashCode、==

equals 与 == 的区别:

在JVM中,内存分为堆内存跟栈内存。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。

一、 简单认识equals与==的区别

String a = "hello";
//字面量,隐式创建对象,由JAVA虚拟机隐含创建的。数据 hello 存储在堆中的串池	(String table);

String b = new String("hello");
//在栈中创建一个变量b,也会在堆中创建一个String对象,b中得到的是 地址值;

System.out.print(b.equals(a));
//result ==> ture

System.out.print(b == a);
//result ==> flase

//当然如果再定义一个 
String c = "hello"; 
//先在 堆中的 串池(String table)中寻找是否已经有指向这个内容的地址了,没有就创建,有就直接复用   复用能节约内存;

System.out.print(c==a);
result ==> ture

String a ; //只是在栈中创建了一个 String 类的对象引用变量 a;

String b = new String("hello") ;
//不仅在栈中创建了一个String类的对象引用变量 b,同时在堆中开辟了一个新空间存放新建的String 对象 "hello",变量 b 指向堆中新建的 String 对象 "hello";

//使用运算符==,它们的地址是不一样的。对象进行 new 操作后,系统都为我们开辟了堆区空间,虽然值一样,但地址不一样。

二、hashcode和equals的介绍

1.hashCode介绍
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。
这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。

2.equals介绍
equals它的作用也是判断两个对象是否相等,如果对象重写了equals()方法,比较两个对象的内容是否相等;如果没有重写,比较两个对象的地址是否相同,等价于“==”。
同样的,equals()定义在JDK的Object.java中,这就意味着Java中的任何类都包含有equals()函数。

简单认识二者之间的区别:

equals和hashCode方法主要的区别在于:性能,可靠性;

equals方法:因为hashCode并不是完全可靠的,有时候不同的对象生成的hashCode也可能一样(生成hashCode值的公式可能存在问题),所以hashCode并不是完全可靠的,只能通过equals保证两个对象确实相等。

hashCode方法:因为重写equals方法比较复杂,调用equals方法比较对象是否相等的效率比较低,而利用hashCode进行对比,只需要生成一个hash值进行比较就可以,效率较高。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值