A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李小然 于 2014-5-16 14:20 编辑
                          首先看到好多提问有关==和equals的区别以及用法的问题,个人总结一下,希望可以帮助大家.:P
   


    ==equals都是比较的,而前者是运算符,后者则是一个方法,基本数据类型和引用数据类型都可以使用运算符==,而只有引用类型数据才可以使用equals,下面具体介绍一下两者的用法以及区别.
    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
    如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
    String a=new String("heima");
    String b=new String("heima");
  
    两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,

Object类的equals方法1.png (50.71 KB, 下载次数: 146)

Object根类equals方法

Object根类equals方法

Object类的equals方法详解.png (184.38 KB, 下载次数: 92)

Object根类equals方法详解

Object根类equals方法详解

评分

参与人数 1黑马币 +1 收起 理由
李小然 + 1 总结的给力! 下次请勿发在版块活动中~.

查看全部评分

35 个回复

倒序浏览
自己先给自己鼓励,加油!!!
回复 使用道具 举报
额,那发到哪个板块啊?像这些总结的东西:(
回复 使用道具 举报
总结这么好不给个分呀?
回复 使用道具 举报
总结的很棒!但是不知道为啥这个版块没有“分享”这一项
等这个功能修复了 你把这个帖子分类改为“论坛分享”
超过五个回复 给我留言 我把分数给你补上:)

这是具体的加分规则
http://bbs.itheima.com/thread-40602-1-1.html
回复 使用道具 举报
总结的不错!赞一个
回复 使用道具 举报
受教 受教了 我就只简单的知道==是比较的地址 而equal则是比较的内容 原来内有玄机~
回复 使用道具 举报
==是比较内容,基本数据类型可以这样,equals是比较对象的引用,2个对象相不相等,是对象的方法
回复 使用道具 举报
非常好,转载了!!!
回复 使用道具 举报
这个面试会用的挺重要的
回复 使用道具 举报
按上面说的,
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
    String a=new String("heima");
    String b=new String("heima");
这时,==就是false;equals就是true了;

但是,看下源码,,Object中的equals内部还是用了 == 去比较.这就矛盾了哈,看了源码,确实是没有复写的话,equals就是用==的,这时引用地址不一样,就是false了吧...如何破???

小白疑问,不喜请赐教哈
回复 使用道具 举报
木易在他乡 发表于 2014-8-18 11:30
按上面说的,
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较 ...

我36期安卓班长,这些天木有时间上,刚看到,你看下String类的equals就行了,String类重写了Object的eequals方法的
回复 使用道具 举报
总结的真好
回复 使用道具 举报
让我对==和equals 之间的区别有了更加清晰的认识。
回复 使用道具 举报
lby369 中级黑马 2014-12-31 21:47:51
15#
又巩固了一次,这个问题在用的时候经常容易出问题。
回复 使用道具 举报
多谢楼主,多年的老问题,终于清晰了:lol
回复 使用道具 举报
我在这有点晕晕的...老师讲的太快了
回复 使用道具 举报
受教了,谢谢楼主的分享
回复 使用道具 举报
class Demo {
        public static void main (String[] args) {
        StringBuffer buffer1 = new StringBuffer("abc");
        StringBuffer buffer2 = new StringBuffer("abc");
System.out.println(buffer1.equals(buffer2) );
}
为什么这个为false呢?
回复 使用道具 举报
写的很好,尤其是 创建对象的时候 说的是创建一个变量指向一个对象
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马