浅谈==和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集合可以存储和操 ...
随机推荐
- HDU(4394),数论上的BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4394 思路很巧妙,要找到m,可以这样思考,n的个位是有m的个位决定的,从0-9搜一遍,满足情况的话就继 ...
- Githug攻略
ruby运行环境安装 githug 是一个 ruby 程序,运行的 githug 需要 ruby 运行环境.下面部分的主要内容是如何在不同平台上安装好 ruby 环境. MacOSX MacOSX 里 ...
- 分布式系统session一致性问题
一.引言 1.什么是session Session 是服务器用来保存用户操作的一系列会话信息,由Web容器进行管理.最常见的,会把用户的登录信息.用户信息存储在 session 中,以保持登录状态. ...
- 知识总结和记录——HTML
文档结构 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="U ...
- c++ 11 线程池的简单封装
#include <condition_variable> #include <queue> #include <thread> #include <vect ...
- 第34-1题:LeetCode112. Path Sum I
题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum ...
- Python——字典
字典是一种key-value 的 数据类型,使用就想我们上学用的字典.可以通过笔画,字母来查对应页的详细内容. 特性:1. 字典是无须的.(如果光打印字典里的字符串,那么排序不会按照顺序排,因为字典是 ...
- hasOwnProperty自我理解
暂时不考虑ES6中symbol,hasOwnProperty()方法返回的是一个对象上是否包含一个指定属性,如果含有则返回true,如果没有则返回false. 和 in 运算符不同,该方法会忽略掉 ...
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
- 裸机——Nand
1.首先需要知道Nand的基础知识 从Nand的芯片手册可以获得 我使用的芯片手册是 K9F2G08 首先从芯片手册的名称可以获得信息: K9F:三星 2G : 2Gb (256MB) 08 ...