浅谈==和equals的区别
java中的==和equals的区别?

看上面的代码,输出的结果是:
true
false
true
true
1.为什么会有上面的区别呢?==和equals比较的到底是什么呢?
搞清楚两者的区别其实很简单,在thinking in java 中有一句话,需要我们好好体会下:"关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系"。
首先我们都知道==就是一个关系操作符,那么==比较的就是操作数值之间是否相等。当操作数值的类型是基本类型的时候,操作的值就是变量存储的值,例如int a = 10,int b = 10;很明显,a,b的值都是10,因此a==b的结果是true。当操作数的类型不是基本类型的时候,例如是引用类型的变量,例如 Stirng str1 = new String("123") String str2 = new String("123");当判断 str1==str2,我们还是根据上面那句话来判断,明确str1和str2的值到底是不是一样即可。str1是一个引用类型,指向的是一个String对象,在内存str1存储的值是一个地址,这个地址记录了对象在堆内存中的存储地址,那么很明显,str1和str2指向两个不同的对象,即str1和str2的值不同。所以str1==str2的结果是false.
2.equals方法的特殊之处
很明确,equal是一个方法,是Object类中定义的一个方法,看下发方法的构成:

很明显,equals最终比较的是两个对象引用的值,那么str1.equals(str2)的结果应该是false,可运行结果是true,这是怎么回事呢?是不是上面那句话有问题呢?不是的,那是因为String这个类继承了Object类,并且重写了equals方法。看下重写的equals方法

从代码很容易知道,String的equals方法,首先判断两个对象是否相同,如果不同,比较两个字符串的值是否相同。如果相同返回true.因此str1.equals(str2)的结果是true。同样的诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等,所以equals()比较,需要具体情况具体分析。
3.总结
==,如果是基本类型,则直接比较存储的值是否相等,如果是引用类型,则比较所指向的对象的地址是否相同
equals方法,基本类型不能使用equals,如果未对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,如果进行了重写,则根绝重写的方法具体情况具体分析。
浅谈==和equals的区别的更多相关文章
- [转]浅谈Hive vs. HBase 区别在哪里
浅谈Hive vs. HBase 区别在哪里 导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于HDFS顶层的NoSQL(=No ...
- 浅谈Sass与Less区别、优缺点
Sass是一种动态样式语言,Sass语法的缩排语法,比Css比多出很多功能,如变量,嵌套,运算,继承,颜色处理,函数等,易于阅读.Cass的安装需要安装Ruby环境,是服务器端处理的,Less是需要引 ...
- 浅谈sass与less区别优缺点
Sass是一种动态样式语言,Sass语法的缩排语法,比Css比多出很多功能,如变量,嵌套,运算,继承,颜色处理,函数等,易于阅读.Cass的安装需要安装Ruby环境,是服务器端处理的,Less是需要引 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- 浅谈Java中set.map.List的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- 【转】浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- Java基础学习总结(29)——浅谈Java中的Set、List、Map的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
随机推荐
- P1909 买铅笔
题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔 ...
- MySQL 主从同步 Slave_IO_Running: No
MariaDB [chen]> show slave status \G *************************** 1. row ************************* ...
- 【Java】对象、类(抽象类与内部类)、接口
博文内容概况 对象和类 抽象类 接口 内部类 对象和类 对象是对客观事物的抽象,类是对对象的抽象.类是一种数据类型,其外观和行为由用户定义.类中可以设置两种类型的元素:字段(有时被称为数据成员)和方法 ...
- Status bar - iOS之状态栏
(一)设置状态栏显示和隐藏 1.通过 Info.plist 文件增加字段,控制状态栏全局显示和隐藏 在 Info.plist 文件中增加字段 Status bar is initially hidde ...
- Python 统计不同url svn代码变更数
#!/bin/bash/python # -*-coding:utf-8-*- #svn统计不同url代码行数变更脚本,过滤空行,不过滤注释. import subprocess,os,sys,tim ...
- [优化]Steamroller-freecodecamp算法题目
晚上在medium看到一篇关于找工作的文章,里面提到一个面试题目--flattening an array(扁平化数组).这我好像在哪看过!应该是freecodecamp里的算法某一题.翻了下博客记录 ...
- BZOJ1050: [HAOI2006]旅行comf(并查集 最小生成树)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4021 Solved: 2257[Submit][Status][Discuss] Descript ...
- lintcode_115_不同的路径 II
不同的路径 II 描述 笔记 数据 评测 "不同的路径" 的跟进问题: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用 1 和 0 来表示. ...
- ofbiz研究
近段时间,刚有有时间研究了下ofbiz ; 目前还是刚开始,后期会记录过程 有一起研究的没
- 通过Samba实现Linux与Windows间的文件共享
Samba Samba,是用来让Linux系列的操作系统与Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网 ...