黑马程序员技术交流社区
标题:
"=="和equals,有什么区别啊?
[打印本页]
作者:
飞舞❤心动
时间:
2012-6-8 23:13
标题:
"=="和equals,有什么区别啊?
"=="和equals有什么区别啊,只知道equals是复写Object的,但是其他还真不太清楚。
同时什么时候用"=="好,什么时候用equals好?
作者:
陈嘉宾
时间:
2012-6-8 23:19
equals判断字符串值内容是否相等
==判断类型内存地址是否相同
如String aa="sss" aa变量占用了内存地址如001,
String bb="sss" aa变量则占用了其他内存地址如002;
aa.equals(bb)比较字符串值都是sss则返回true
而aa==bb 比较内存地址,一个是001一个是002,则返回false
作者:
郑传庆
时间:
2012-6-8 23:25
==操作是比较2个变量的值是否相等,对于引用类型变量表示的是两个变量在存储的地址是否相等。
equals操作表示两个变量是否对同一个对象的引用,即堆中的内容是否相同,equals返回的一般是true和false两个boolean类型
作者:
吴小铁你好
时间:
2012-6-8 23:29
equals 方法是Object类中的一个方法,一般会被子类复写,像String类就复写了Object类的equals方法,String类的equals方法是比较的字符串的内容(建议查看String类源代码就一清二楚了),如果子类没有复写Object类的equals方法的话,那么Object类的equals方法是这样实现的,源代码:
public boolean equals(Object obj) {
return (this == obj);
}
所以如果子类不重写equals方法的话,它就等价于==
明白了否?
作者:
郑传庆
时间:
2012-6-8 23:31
补充一下:什么时候用"=="好,什么时候用equals好?
当要比较两个基本类型的数据或两个引用变量是否相当,这时可以用==
当要比较两个独立对象的内容是否相同,这是用equals
作者:
冯心程
时间:
2012-6-8 23:38
== 比对的时候看的是内存地址
equals比对的时候看的是字符串 也就是表象的东西
所以
通俗点说
equals多用在比较两个name是否相等啊什么的{:soso_e121:}
作者:
钟成军
时间:
2012-6-8 23:51
首先,对象间的比较有两种方式,即“==”和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,内容也是一样的。
}
}
作者:
飞舞❤心动
时间:
2012-6-9 00:06
陈嘉宾 发表于 2012-6-8 23:19
equals判断字符串值内容是否相等
==判断类型内存地址是否相同
明白了!谢谢了
作者:
何旭栋
时间:
2012-6-9 11:29
"=="运算符比较的是内存地址
equals()在Object类中也是比较方法体也是比较地址,子类继承后可以复写equals()方法,自定义对象比较方法。
作者:
吴扬
时间:
2012-6-9 13:24
本帖最后由 吴扬 于 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类中,该方法就被覆写,覆写之后比较的就是字符串的内容,而不是内存地址值了。所以,有些时候要根据自己的需求看看是否需要覆写这个方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2