Equal 和==比较

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相当,只能用==操作符。

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(对内存),变量本身也占用一块内存,例如Object obj = new Object()变量obj是一个内存,new Object()是一个内存,此时,变量所对应的内存中存储的数据就是对象占用的那块内存的首地址。对于指向对象内存的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

String a=new String("foo");

String b=new String("foo");

两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,他们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b即返回false,而这两个对象中内容是相同的,所以,表达式a.equals(b)将返回true。

在实际开发中,我们经常要比较传递进行来的字符串内容是否相等,例如,String input = ....; input.equals("quit"),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本都是使用equals方法。

如果一个类没有定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:

boolean equals(Object o){

  return this==o;

  }

这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是比较两个变量指向的对象是否是同一个对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可以认为两个对象的内容是相同的

 

最新文章

  1. C#面向对象设计模式纵横谈——4.Builder 生成器模式(创建型模式)
  2. Codeforces Round #344 (Div. 2) A. Interview
  3. drawable animation
  4. C#知识体系(二)用案例来理解委托与事件
  5. Gunicorn 文档翻译
  6. DSP using MATLAB 示例Example3.21
  7. Unity3D使用小技巧
  8. SGU 112.a^b - b^a
  9. 对require.js 的使用进行总结
  10. 求1e11以内的素数
  11. linux监控命令全覆盖(图文说明)
  12. 制作自己的web字体
  13. MVC4数据注解和验证
  14. 本地存储和cookies之间的区别
  15. CPU Affinity
  16. java如何将html过滤为纯文本
  17. 使用react-router实现单页面应用路由
  18. 如何使用 OpenCV 打开摄像头获取图像数据?
  19. 金蝶K3 wise 插件二次开发与配置
  20. python -- 小数据池 is和 == 再谈编码

热门文章

  1. Yeslab现任明教教主数据中心第二门课程UCS 视频教程下载
  2. DeNA/上海纵游通过使用AWS大量缩短新款游戏和服务的上线时间
  3. USACO Section 2.1 Sorting a Three-Valued Sequence
  4. bootstrap之Flick
  5. Java web项目
  6. RFC端口号定义
  7. C#监听文件
  8. 常用网站开发类Firefox扩展插件 (转)
  9. C# Winform程序本地化应用
  10. 学php之翻译wordpress(2)