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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飞舞❤心动 初级黑马   /  2012-6-8 23:13  /  2228 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

"=="和equals有什么区别啊,只知道equals是复写Object的,但是其他还真不太清楚。
同时什么时候用"=="好,什么时候用equals好?

9 个回复

倒序浏览
equals判断字符串值内容是否相等
==判断类型内存地址是否相同

如String aa="sss" aa变量占用了内存地址如001,
String bb="sss" aa变量则占用了其他内存地址如002;
aa.equals(bb)比较字符串值都是sss则返回true
而aa==bb 比较内存地址,一个是001一个是002,则返回false

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1

查看全部评分

回复 使用道具 举报
==操作是比较2个变量的值是否相等,对于引用类型变量表示的是两个变量在存储的地址是否相等。
equals操作表示两个变量是否对同一个对象的引用,即堆中的内容是否相同,equals返回的一般是true和false两个boolean类型
回复 使用道具 举报
equals 方法是Object类中的一个方法,一般会被子类复写,像String类就复写了Object类的equals方法,String类的equals方法是比较的字符串的内容(建议查看String类源代码就一清二楚了),如果子类没有复写Object类的equals方法的话,那么Object类的equals方法是这样实现的,源代码:

public boolean equals(Object obj) {
return (this == obj);
    }

所以如果子类不重写equals方法的话,它就等价于==

明白了否?
回复 使用道具 举报
补充一下:什么时候用"=="好,什么时候用equals好?
当要比较两个基本类型的数据或两个引用变量是否相当,这时可以用==
当要比较两个独立对象的内容是否相同,这是用equals
回复 使用道具 举报
==    比对的时候看的是内存地址
equals比对的时候看的是字符串 也就是表象的东西
所以
通俗点说
equals多用在比较两个name是否相等啊什么的{:soso_e121:}
回复 使用道具 举报
首先,对象间的比较有两种方式,即“==”和equals.
"=="运算符用于比较两个对象的内存地址是否相等。
equals()方法用于比较两个对象的内容是否一致。
两个简单的例子:
public class TestEquals
{
public static void main(String[] args)
{
  String str1 = new String("hello");
  String str2 = new String("hello");
  String str3 = str2;
  System.out.println(str1==str2);//运行结果为false.为什么呢?
           //因为这两个对象指向了不同的内存空间,所以它们的内存地址是不一样的。
  System.out.println(str2==str3);//运行结果为true.
           //因为"str3=str2"这就相当于str3也指向了str2的引用,
     //此时这两个对象指向同一内存地址,所以结果为true.

}
}
public class TestEquals1
{
public static void main(String[] args)
{
  String str1 = new String("hello");
  String str2 = new String("hello");
  String str3 = str2;
  System.out.println(str1.equals(str2));//true.因为equals()方法用于比较两个对象的内容是否一致,
       //而这两个对象的内容是一样的。
  System.out.println(str2.equals(str3));//true,内容也是一样的。
}
}













评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈嘉宾 发表于 2012-6-8 23:19
equals判断字符串值内容是否相等
==判断类型内存地址是否相同

明白了!谢谢了
回复 使用道具 举报
"=="运算符比较的是内存地址
equals()在Object类中也是比较方法体也是比较地址,子类继承后可以复写equals()方法,自定义对象比较方法。
回复 使用道具 举报
本帖最后由 吴扬 于 2012-6-9 13:25 编辑

我的理解是这样的,“==”是比较成员变量的值是否相等,如果是引用型变量,就比较变量的内存地址值,比如:
int a = 3;
int b = 4;
return a == b;
这两个变量值当然不一样,所以就会返回false,再看
Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = obj1;
return obj1 == obj2;
return obj1 == obj3;
由于obj1和obj2是在堆内存中是两个不同的对象,并被两个不同的引用所指向,所以他们的内存地址不相等,第一个return的就是false,然而第三句话obj1的引用赋给了obj3,所以obj1和obj3指向的是同一个堆内存中的对象,所以第二个return返回的是true。
equals()这个方法是Object类中的方法,如果不对这个方法进行覆写,那么这个方法的功能和“==”是一样的,比如,在String类中,该方法就被覆写,覆写之后比较的就是字符串的内容,而不是内存地址值了。所以,有些时候要根据自己的需求看看是否需要覆写这个方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马