黑马程序员技术交流社区
标题: “==”and equals [打印本页]
作者: 杨丽静 时间: 2014-1-14 23:08
标题: “==”and equals
本帖最后由 杨丽静 于 2014-1-15 23:12 编辑
"=="和equals方法究竟有什么区别?我只知道“==”操作符专门用来比较两个变量的值是否相等,equals方法是用于比较两个独立对象的内容是否相同。哪位高手可以做下详细解说,我觉得就这些是不够的
作者: 黄晓鑫 时间: 2014-1-14 23:10
equals其实底层也是调用==号 用于操作基本数据类型 其实用==号就行了 equlas方法只是用于比较对象的内容的
作者: 杨丽静 时间: 2014-1-14 23:15
我就是不明白为神魔程序中有时用==有时用equals,真心的分不清该用哪个,用的时候有时就测试一下这个不行就用那个,但始终还是不大明白,还望详细给说说怎莫用
作者: 黄晓鑫 时间: 2014-1-14 23:17
一般你学到集合 在定义一个类的时候通常都是需要覆盖equals toString hashcoe等方法 建立自己的比较方法
作者: 不冬眠的蚂蚁 时间: 2014-1-14 23:42
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true;
(值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中)
作者: mrwise1991 时间: 2014-1-15 00:32
==比较的是对象的引用,即其在堆内存中的地址值;而equals默认比较的是对象的值,即其内容。例如:
String x="mrwise";
String y="mrwise";
String z=new String("mrwise");
其中x==y,但是x.equals(z)等于True,然而,x==z是假的
作者: 刘旭升 时间: 2014-1-15 09:07
看完这个你要是还不懂,我可以去跳墙了。。http://bbs.itheima.com/forum.php ... ;pre_pos=6&ext=
作者: quan23355 时间: 2014-1-15 16:28
==和equals的区别,==比较的是值,所谓的值一般是指变量值或地址值,如果变量是普通变量,比如int a=4;那么我们就是变量a的值是4,对于这个语句我想一般都是栈内存开辟的普通变量所表示的具体值是什么。如果变量是引用变量,比如String s=new String("abc")那么这里的值是指s所引用的在堆内存中的对象的地址值,内容也就是这个对象的内容abc,equals比较的是内容。我举一些例子:
String s="a";String s1="a";这里我们不管是用==还是equals都是true,为什么呢?原因就是s是直接引用常量池中的一个字符串对象的,并没有指向new一个对象,在常量池中的对象,如果发现有相同的内容是不会再创建的,也就是说s和s1指向的是常量池中的同一个对象,地址值是相同的,内容也是相同的因此不管是==还是equals都是true。
作者: 放课后小朋友 时间: 2014-1-15 19:14
- public class Different {
- /**
- * @param args
- */
- public static void out(Object obj){
- System.out.println(obj);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int m=1,n=1;
- boolean boo=(m==n);
- String s1=new String("nihao");
- String s2=new String("nihao");
- out(boo);
- out(s1.equals(s2));
- }
- }
复制代码
其中m和n都是引用,说白了就是地址,==比较的是地址值,下面定义了两个String字符串,但是用equals返回的也是true,说明比较的是内容。
一个判断地址是否相同,一个判断内容是否相同,这样应该明白了吧?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |