详解Java中“==”与equals()的区别
Java中“==”与equals()的区别
对于关系操作符“==”,《Java编程思想》中是这样描述的:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。这里的操作数的“值”值得我们注意。对于8种基本数据类型(boolean,byte,char,short,int,float,double,long),它们的变量直接存储的就是“值”。所以,我们用“==”对基本数据类型的变量进行比较时,实际比较的就是变量存储的值,例如:
public static void main(String[] args) { int a = 5, b = 5; System.out.println(a == b); }
很明显,程序将输出:true。但是,下面这段代码呢?
public static void main(String[] args) { Integer c = new Integer(5), d = new Integer(5); System.out.println(c == d); }
我们运行程序,发现输出的是:false。这是因为Integer并非Java中的基本数据类型,其变量c、d在Java中被称为指向对象的引用,其存储的“值”是对象在内存中的地址,而非值“5”本身。所以,c和d实际存储的分别是两个value值都为“5”的Integer对象的地址,这两个对象不在同一块内存空间,“==”比较的结果自然是false了。
那么equals()方法比较的是什么呢?equals()是基类Object中定义的方法,在Object类中,equals()方法定义为:
public boolean equals(Object obj) { return (this == obj); }
这等价于“==”。其实,equals()方法的意义在于重写,否则对equals()的调用是没有意义的。例如,继承自Object的Integer类便重写了equals()方法:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
该方法的意义是对value值进行比较,那么如果我们对于两个具有相同value值的Integer对象调用equals()进行比较:
public static void main(String[] args) { Integer c = new Integer(5), d = new Integer(5); System.out.println(c.equals(d)); }
结果便是true。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章
使用Springboot搭建OAuth2.0 Server的方法示例
这篇文章主要介绍了使用Springboot搭建OAuth2.0 Server的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08详解使用IntelliJ IDEA新建Java Web后端resfulAPI模板
这篇文章主要介绍了详解使用IntelliJ IDEA新建Java Web后端resfulAPI模板,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08基于OpenCv与JVM实现加载保存图像功能(JAVA 图像处理)
openCv有一个名imread的简单函数,用于从文件中读取图像,本文给大家介绍JAVA 图像处理基于OpenCv与JVM实现加载保存图像功能,感兴趣的朋友一起看看吧2022-01-01springboot+jwt+微信小程序授权登录获取token的方法实例
本文主要介绍了springboot+jwt+微信小程序授权登录获取token的方法实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-03-03springboot下实现RedisTemplate List 清空
我们经常会使用Redis的List数据结构来存储一系列的元素,当我们需要清空一个List时,可以使用RedisTemplate来实现,本文就来详细的介绍一下如何实现,感兴趣的可以了解一下2024-01-01
最新评论