黑马程序员技术交流社区
标题:
== 与equals
[打印本页]
作者:
张源锋
时间:
2013-4-2 18:03
标题:
== 与equals
@Test
public void test5(){
String str = new String("abc");
String str1 ="abc";
boolean b1 = str==str1;
boolean b2 = str.equals(str1);
System.out.println(b1+" | "+b2);
}
复制代码
结果
false | true
复制代码
求==与equals的区别
作者:
黑马-郑玉元
时间:
2013-4-2 18:12
通常情况下!==比较的是地址!equals比较的是内容!但是object类里面的equals方法比较的还是地址,自定义的类,如果要比较其内容就要重写equals方法!上述题目当中,你new的对象和那个直接赋值在不同地址中,所以==是false,equals是true!
作者:
抽烟男孩
时间:
2013-4-2 18:16
本帖最后由 抽烟男孩 于 2013-4-2 18:21 编辑
针对以上代码,如果是==需要两个String对象的引用(表示的内存地址块相同),而equal仅仅需要其内容即字符串相同。
因为如果是==的话它还包括对象的序列号和一些object属性。
作者:
kelline
时间:
2013-4-2 18:19
== 是用来比较在内存地址的 而equals 则是比较实际的内容
比如你的代码中:
String str = new String("abc"); -- 通过new实例化出的对象, 他会存放在内存中开辟的空间
String str1 ="abc"; -- 通过赋值在堆内存中开辟出的空间
他们的内存地址是不同的, 所以当使用 == 来进行判断的时候, 会false
而equals 是用来比较放在内存中的值的, 因为他们都是abc , 所以返回值是true
作者:
庞立森
时间:
2013-4-2 18:32
equals比较的是内容,因为都是"abc"所以是true,==比较的是地址值,new这个关键字表示在内存里面开辟一个新的内存空间,他的地址值和原来的是不一样的,所以是false
一般情况下,我们会去自己重写equals方法来满足我们个人的要求
作者:
HM张勇
时间:
2013-4-2 18:34
Equals方法比较的是内容是否相等
==用来比较两个对象是否相等。它比较的是地址是否相同。
作者:
赵海洋
时间:
2013-4-2 18:35
以上代码中,==比较的是内存地址,两个str的内存地址显然不同。而代码中equals是String方法中的equals,不是Object的,所以可以直接比较内容,即字符串的内容是不是相等,所以返回值一个是false,一个是true。
作者:
原满
时间:
2013-4-2 18:56
==用来比较对象的引用是否相等,此例中str==str2比较的是str 与str2 的内存地址 str与str2的内存地址值不同所以返回false
equals方法是Object类提供的一个实例方法,String对象的equals 方法重写了Object的equals()方法,可以用来判断两个字符串的值是否相等,此例中显然str与str2的值都是"abc" 所以str.equals(str1)返回true
作者:
范鹏飞
时间:
2013-4-2 19:04
如果是基本类型的话,可以用==判断,判断的是值。
引用类型的如果用==判断,判断的是地址值,new出来的两个对象,虽然对象本身相同,但是地址值肯定是不同的,所以是false。
用equals判断的是对象本身的内容,这就是true。
作者:
yangyinhui
时间:
2013-4-2 19:04
对于实例对象而言,==比较的依然是内存地址(所以你可以看出无论什么情况,==一直比较的都是内存地址),而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等
针对你的问题:首先str==str1;比较的是内存地址很显然他们的内存地址是不同的"str"是new出来的对象,"str1"是一个字符串。
str.equals(str1);
作者:
yangyinhui
时间:
2013-4-2 19:09
针对你的问题:首先str==str1;比较的是内存地址很显然他们的内存地址是不同的"str"是new出来的对象,"str1"是一个字符串。
str.equals(str1);它们比的是内容,很显然他们都是"abc".在这段代码中==比较的是内存地址,equals比较的是内容。
作者:
李力
时间:
2013-4-2 20:00
"=="是比较内存的地址;一般equals是比较两对象的实际内容是否相同!。但是equals的默认行为是比较引用一般用到时会自己重写覆盖!
作者:
李红志
时间:
2013-4-2 20:09
简单理解就是==要求比equasl高,后者只要求值相等,前者要求是同一个对象即值和位置都相同。
作者:
王川
时间:
2013-4-2 20:46
==比较是否相同(地址相同),equals比较是否相等
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2