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, 下载次数: 140)

Object根类equals方法

Object根类equals方法

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

Object根类equals方法详解

Object根类equals方法详解

评分

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

查看全部评分

35 个回复

正序浏览
== 在基本数据类型中比较的是数值是否相等;在引用数据类型中比较的是堆内存中的地址值是否相等;
equals 比较的是字符串是否相等,区分大小写。
回复 使用道具 举报
受教了~版主辛苦了。
回复 使用道具 举报
==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
回复 使用道具 举报
==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
回复 使用道具 举报
好复杂的样子
回复 使用道具 举报
icm 中级黑马 2015-12-16 22:37:41
30#
写的很好,不过觉得还应该加上一个重写equals方法后的区别。
回复 使用道具 举报
受教了!
回复 使用道具 举报
一个比较地址值,另一个是对String类覆写object类中equals方法的内容,比较的是内容。
回复 使用道具 举报
看不到呀??咋回事
回复 使用道具 举报
总结的内容在哪里,怎么没有看见
回复 使用道具 举报
我也只是知道 == 是比较地址值    String 类重写了equals() 方法 比较的是内容
回复 使用道具 举报
非常详细
回复 使用道具 举报
总结的很好,有看了下,有收获!!
回复 使用道具 举报
要是早看到你的帖子就好了,省的在学的时候费那么大的力气
回复 使用道具 举报
==比较的是地址值
equals 是object 类的函数,一般会被覆写用来判断地址里存储的东西是否相等
回复 使用道具 举报
写的很好,尤其是 创建对象的时候 说的是创建一个变量指向一个对象
回复 使用道具 举报
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呢?
回复 使用道具 举报
受教了,谢谢楼主的分享
回复 使用道具 举报
我在这有点晕晕的...老师讲的太快了
回复 使用道具 举报
多谢楼主,多年的老问题,终于清晰了:lol
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马