前言:对于引用类型的变量,它涉及到两块内存,一块是堆中的内存,用于存放new出来的对象(就是对象的具体内容);另一块是栈内存,用来存放变量在堆内存中的地址。

1,“==”

判断两个变量是否是同一个变量

基本数据类型:直接比较值

引用数据类型:需要比较对应的引用的内存的首地址

2,equals

用来比较两个对象的内容是否相等

这个是Object类型的方法,基本数据类型不可用

由上面Object类中equals的实现可以看出,equals就是通过“==”来实现的,equals判断内容相等的功能是在引用类型定义的时候通过重写String方法实现的,比如说,下面是String类型对equals的重写。

字符串比较特殊:

public class Demo {

public static void main(String[] args) {
String str1=new String("123");
String str2=new String("123");
System.out.println(str1==str2);
System.out.println(str1.equals(str2)); }}

String通过new串获取的时候是两个内容相同的对象(不是同一个对象)

所以输出结果为:

(2)

public class Demo {

public static void main(String[] args) {
String str1="123";
String str2="123";
System.out.println(str1==str2);
System.out.println(str1.equals(str2)); }}

这种方式声明的是两个相同的对象(准确的说就是一个对象)

所以输出结果:

所以在我们自定义的类中,如果需要对该类的对象进行内容的比较就需要重写他的equals方法。

尤其是在Map,Set集合中,由于他们是无序的,所以要求他们的几何元素不可重复,他们在判断元素是否重复的时候就会自动去调用equals方法。

3,HashCode

hashCode()是从Object方法中继承过来的吗,他也用来鉴定两个对象是否相等。Object类中的hashCode()方法,返回对象在内存中地址转换成一个int值,所以如果不重写hashCode()任何对象的hashCode()的返回值都是不相等的。

  虽然equals()方法的作用与之相同,但是他与hashcode也是哪有区别的。

一般来将,equals()是给用户调用的,如果需要判断两个对象是否相等,可以重写equals方法,然后再代码中调用,这样就可以判断两个对象的内容是否相等了。

对于hashCode()用户一般不会去调用它,例如在hashMap()中。由于Key是不可以重复的,他在判断key是否重复时就使用了hashCode()方法,而且也是用到了equals()方法,

==与equals与hashCode的区别联系。的更多相关文章

  1. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  2. Java == ,equals 和 hashcode 的区别和联系(阿里面试)

    今天阿里的人问我 equals 与hashcode的区别,我答不上来, 仔细查了一下,做了总结: (1) == 这是Java 比较内存地址,就是内存中的对象: java中的==是比较两个对象在JVM中 ...

  3. equals与hashCode的区别

    equals与hashCode的区别 1.类中的equals方法是一定要重写/覆盖(Override)的,因为要让它按照设计的需求来根据特征值判断等价性. 这里的特征值,就是String类型的name ...

  4. 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例

    原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例   部分代码参考http ...

  5. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例

    1.重写equals方法实例   部分代码参考http://blog.csdn.net/wangloveall/article/details/7899948 重写equals方法的目的是判断两个对象 ...

  6. java中==和equals和hashcode的区别详解

    一.相同点 都是用来进行值或对象的比较. 二.不同点 对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相 ...

  7. Java中equals和hashcode的区别?

    Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...

  8. Java 中的 equals,==与 hashCode 的区别与联系

    一. 关系操作符 ==:若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同.也就是说,若 ...

  9. equals() 与 hashcode() 的区别与联系

    两者都是从Object类继承的方法,Object中equals方法比较的是this和参数传进来的对象的引用地址是否相同,这样的话,equals返回值为true的必要充分条件就是两者指向同一个对象,那么 ...

随机推荐

  1. 如何设置Ultraedit自动换行

    有时候这会非常麻烦, 要让Ultraedit自动换行请按发下方法: 1. 点击菜单栏的"高级→配置",找到"编辑器→自动换行/制表符设置". 2. 然后,把&q ...

  2. charles https抓包 (安卓安装证书)

    的Android APP使用的都是http请求,之后改成了https,就出现了以下情况,无法正常读取抓取的内容 下面阐述一下,正确的安装步骤,为出现类似情况的朋友提供一个参考: 1.第一步: 最后点击 ...

  3. hibernate的多对多关联映射

    在我们实际项目中,多对多的情况也时长存在,比如最常见的就是系统管理的五张表,如下面的一个结构: 在本文学习hibernate多对多关联映射的实验中我简单的写几个字段,达到学习目的即可. 1.多对多的关 ...

  4. 在pycharm和tensorflow环境下运行nmt

    目的是在pycharm中调试nmt代码,主要做了如下工作: 配置pycharm编译环境 在File->Settings->Project->Project Interpreter 设 ...

  5. python模块分析之hashlib加密(二)

    前言 hashlib模块是py3.+用来对字符串进行hash加密的模块,核心算法是md5,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用. 模块分析 hashlib模块有多种加 ...

  6. C语言清空输入缓冲区的N种方法对比【转】

    转自:http://www.cnblogs.com/codingmylife/archive/2010/04/18/1714954.html C语言中有几个基本输入函数: //获取字符系列 int f ...

  7. 初始ADO.NET数据操作

    以下介绍直接来源与百度百科,介绍十分全面和详细,作为小菜的我们没有理由不看完这些枯燥的介绍原有: ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于 ...

  8. keyspace notification(键空间通知)-待验证

    一.需求分析: 设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期Key有个监听,如何对过期Key进行一个回调处理? 如何使用 Redis 来实现定时任务? 二.序言: 本文所说的定时任务 ...

  9. Ibatis.Net 输出SQL语句学习(七)

    一.IBatis.net输出SQL语句 输出IBatis.net生成的SQL语句,能够方便调试. 在MapperHelper类中添加GetSql方法: /// <summary> /// ...

  10. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...