在Java字符串那些事儿一文发表后,朋友给我留言说:比较字符串用equals不就完了呗,干嘛要用"==",吃饱了撑的,能不能来点实际的。其实在文章里我是想表明,Java字符串两种声明方式在堆内存中不同的体现,我们在写代码过程中,为了避免重复的创建对象,尽量使用String s1 ="123" 而不是String s1 = new String("123"),因为JVM对前者给做了优化。

那么,我们今天来说说equels,话不多说,上代码:

执行一下,结果如下:

面试题中老问"=="与和equals有什么区别,甚至连百度搜索equals也会自动关联出equals和"=="的区别这一类的问题来。

笔者一直认为,这两者之间没有必然的联系,在引用类型中,"=="是比较两个引用是否指向堆内存里的同一个地址(同一个对象),而equals是一个普通的方法,该方法返回的结果依赖于自身的实现。我们先看一下Person这个类,并没有equals方法呀,那为什么不报错呢?在Java中,如果一个类没有继承其它类,那么它默认继承Object这个类,打开Object这个类看一下,发现如下代码,Person这个类的equals方法就继承自这里

很简单,就一句代码,判断两个引用是否指向同一个对象,两个Person对象在堆内存中的表现如下图所示:

所以代码person1.equals(person2)等同于person1 == person2,当然打印出来的结果是false。我们再来看看Integer这个类, equals的实现如下:

当代码执行到System.out.println(itr.equals(lon))时,会判断传入的lon这个对象是否是Integer类型,这里的lon是Long类型,所以打印出来的结果当然是false了。

最后是我们String的实现

当代码执行到:System.out.println(s3.equals(s4)),由于字符串底层char数组里存的都是{'1','0','0'}当然打印出来是true了。

转载无限欢迎,但请注明「清浅池塘」和「https://zhuanlan.zhihu.com/p/27573287」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。

java中equals的理解(1)相关推荐

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

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

  2. Java中 多态的理解

    ** Java中 多态的理解 ** 多态官方定义为: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指 ...

  3. 【转载】谈谈我对Java中CallBack的理解

    谈谈我对Java中CallBack的理解 转载自: http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallB ...

  4. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

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

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

  6. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

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

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

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

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

  9. JAVA中多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在. 标题如何理解一种事物的多种形态? 举个例子,拿人类.男人.女人来说.男人.女人.都分别 ...

最新文章

  1. Android 获取App的版本号与版本名称的2中方法
  2. 基于i2c子系统的驱动分析
  3. 抓取一个连续的网页_搞懂各大搜索引擎蜘蛛的抓取规则,快速获得排名!
  4. mysql分类和事务回滚
  5. C++对象模型1——类对象的sizeof、static成员、对象模型、this指针
  6. oracle 11g 清除 trc后缀文件,请教一个跟踪文件的问题。11g 很多trc文件。。
  7. mysql如何获取当前时间
  8. python uwsgi_Python Web 程序使用 uWSGI 部署
  9. oracle 删除表中重复记录,并保留一条
  10. 通过VMName获取VM IP
  11. formData:解决formData使用append追加后console仍为空
  12. Eclipse 格式化代码且不影响注释
  13. Android 截屏监听(截图分享功能)
  14. Spring Boot 错误页面解析原理(超级无敌详细)
  15. matlab中的~用法和~=
  16. 深度诗歌阅读:你永远是个孩子
  17. [Caffe]: HDF5Data Layer
  18. python中占位符包括_python中占位符
  19. c语言按键事件判断函数kbhit和按键获取函数getch
  20. 如何干净、彻底地删除软件、文件夹

热门文章

  1. 短视频、直播平台第三方SDK接入教程
  2. Coding-Job:从研发到生产的容器化融合实践
  3. iOS开发之网络编程--6、NSURLSessionConfiguration笔记
  4. [詹兴致矩阵论习题参考解答]习题3.7
  5. 2013/2/CSS文字的着重显示
  6. WPF ListBox(ListView) 自定义 Button 项,获取 ListBox(ListView)的SelectedValue
  7. IT公司比较流行的10种编程语言
  8. ZZULIOJ 1115: 数组最小值
  9. java build返回空值_OKHTTP拦截器不断返回空值并使应用程序崩溃
  10. 信息学奥赛一本通 1188:菲波那契数列(2) | OpenJudge NOI 2.3 1760:菲波那契数列(2)