java中与很多有意思又值得深究的点。

写这篇文章呢,是由于在百度知道中看到一个问题:怎样比较两个对象是否相同。这又使我想到了另外一个问题,== 和 equals有什么不同?写了几行代码,看了几篇文章,将见解列出来,分享。

在阐述之前请大家先看一段代码。

public class Equals {public static void main(String[] args) {Integer int1 = new Integer(1);Integer int2 = new Integer(1);String str1 = new String("Hello World");String str2 = new String("Hello World");if(int1==int2){System.out.println("int1 == int2");}if(int1.equals(int2)){System.out.println("int1 equals int2");}if(str1==str2){System.out.println("str1 == str2");}if(str1.equals(str2)){System.out.println("str1 equals str2");}}
}

输出结果:

int1 equals int2
str1 equals str2

各位也都知道,java中万物皆对象。那么也有,java中所有声明出来的对象全都继承Object对象。

第一次看到这段代码的输出结果我也是很吃惊的,很奇怪啊。我奇怪的地方有两点:

1、int1和int2的值明明相等,可是却不是==,非常奇怪。

2、int1和int2明明是两个对象,可是却能equals相等,更加奇怪。

对于1,我奇怪的是==比较的是数值相等啊。可是两个明明相等的值却不想等。可是后来查了很多资料之后看到了这么一句话:

对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址;(引用,原文链接在文末)

这就很明了了,也就是说==在比较的int1和int2的时候比的对象的地址,那么分别两次new出来的对象地址自然不可能相同。

对于2,

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = count;if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) {if (v1[i++] != v2[j++])return false;}return true;}}return false;}

  则可以看到,在String或者Integer中都可以看到,java对Object的equals方法进行了重写都分别比较的是对象的值。所以才会有第二种结果的产生,其实仔细想想也是,总不可能没有能够正确比较的方法吧。

 public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}

  

总结,即:

 1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

    如果作用于引用类型的变量,则比较的是所指向的对象的地址

 2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容

原有两段话的原文地址:http://www.cnblogs.com/dolphin0520/p/3592500.html

转载于:https://www.cnblogs.com/yidiandhappy/p/6397635.html

java == 与 equals 相同与不同点相关推荐

  1. JAVA 中equals()与==的区别

    原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...

  2. java的equals方法_Java Date equals()方法与示例

    java的equals方法 日期类equals()方法 (Date Class equals() method) equals() method is available in java.util p ...

  3. java的equals方法_Java LocalDateTime类| 带示例的equals()方法

    java的equals方法 LocalDateTime类equals()方法 (LocalDateTime Class equals() method) equals() method is avai ...

  4. java的equals方法_Java Vector equals()方法与示例

    java的equals方法 向量类的equals()方法 (Vector Class equals() method) equals() method is available in java.uti ...

  5. java的equals方法_Java Duration类| 带示例的equals()方法

    java的equals方法 持续时间类equals()方法 (Duration Class equals() method) equals() method is available in java. ...

  6. Java中equals()方法和==的区别分析

    Java中equals方法和==的区别分析 equals(Object obj)方法,将对象与传入的obj进行比较,相等返回true,否则返回false.equals方法和"==" ...

  7. Java中equals()和“==”区别

    Java中equals()和"=="区别 1.对于基础数据类型,使用"=="比较值是否相等: 2.对于复合数据类型(类),使用equals()和"== ...

  8. Java字符串equals()

    Java String equals() method is used to compare this string with the passed object as argument. Java字 ...

  9. 关于java中equals与==的区别的小实验

    java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...

最新文章

  1. Amazon运营如何做?Amazon运营需做好全局的加减法
  2. json相关,浏览器打开json格式的api接口时,进行格式化,chrome插件
  3. 初学Java开发,这9本书值得一看
  4. 好文推荐 | 分布式锁用Redis好,还是Zookeeper好?
  5. java接口与集合_【总结】Java常用集合接口与集合类
  6. 实践练习四:迁移 MySQL 数据到 OceanBase 集群
  7. Fast Fourier Transform
  8. MOSS2007服务器端的安装与基本配置
  9. textarea统计剩余字数(动态提示)
  10. 百度网盘也能BT下载ED2K
  11. Linux下为Calibre书库打中文目录名与文件名补丁
  12. 链家混三个月底薪_上海链家底薪8000劝退贴
  13. 计算机学硕和专硕,应该怎么选?
  14. 【XBEE手册】ZigBee网络
  15. 【Redis学习05】优惠券秒杀及其优化
  16. request的setAttribute()用法及request.sendRedirect 与 request.getRequestDispatcher.forward 的区别
  17. win2003 php asp.net,Win2003下配置iis+php+mysql+zend图文 使其支持asp,.net,cgi,perl和php
  18. 5分钟教你做一个WebView广告过滤器
  19. python写一个爬虫、爬取网站漫画信息_python爬取漫画
  20. 股票API之----------雅虎财经频道

热门文章

  1. mysql内置多个数据存储引擎_一个mysql数据库,既有myisam存储引擎,又有innodb存储引擎,参数如...
  2. 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数
  3. 系统优化怎么做-Tomcat优化
  4. react 和 lodash 完美结合命令
  5. python随机生成中文字符串_利用python3随机生成中文字符的实现方法
  6. mapgis明码文件转为点线面文件_手机上word文档可以转为pdf文件吗?
  7. 微型计算机硬件的最小配置包括,职中计算机应用基础第一章测试题及答案
  8. 16.异常处理机制:exception
  9. 【Linux】34. shell脚本判断当前年份是否正确
  10. 【C++】17. map []操作符、insert()、emplace()