黑马程序员技术交流社区

标题: “==”和equals的区别,有什么不同之处吗? [打印本页]

作者: jicz007    时间: 2011-10-16 17:26
标题: “==”和equals的区别,有什么不同之处吗?
本帖最后由 jicz007 于 2011-10-16 17:27 编辑

"=="和equals的区别,有什么不同之处吗?

什么时候用"=="好,什么时候用equals好?
作者: lvhongpan    时间: 2011-10-16 17:58
== 实际上是比较的两个字符串的物理内存地址而equals 比较两个对象的值(如果默认继承自 OBJECT ,则 equals 比较两个对象地址), String class override 了 Object class 的 equals 方法,实现了自己的方法,所以 equals 比较的是实际值而非地址

作者: 想好了再写    时间: 2011-10-16 19:16
运算符‘==’比较两个对象是否引用同一个实例,而equals()和equalsIgnoreCase()则比较两个字符串对应的每个字符值是否相同。
比如:
String str1=new String("hello!");
String str2=new String("hello!");
那么
str1==str2  为false
str1.equals(str2)  为true
作者: 黄锋    时间: 2011-10-16 19:19
==和equals的区别是
==是指两个对象是否指向同一个内存地址
equals是指两个对象地址中是否存拉相同的内容。
作者: 罗亚东    时间: 2011-10-16 20:12
==和equals()方法的区别,==是比较引用变量的首地址,例如:
String str1=new String("abc");
String str2=new String("abc");
String str3=str1;
if(str1==str2) System.out.println("true");
else
System.out.println("false");则输出结果就为false,结果不等,但是str1和str3是相等的。
equals()比较的是引用变量的内容,if(str1.equals(str3)),则结果就会返回true。
两个数组的比较,equals(int[] a1,int[] a2)。
作者: 朱华    时间: 2011-10-17 12:45
纯手打,请区分。
在不考虑重新方法的情况下,
==指的是比较两个对象的内存地址。
equals指的是比较两个字符串中值是否一样。

但是他们都是有特例的,
比如==,integer的==就是一个特例
  1. Integer int1 = 127;
  2. Integer int2 = 127;

  3. Integer int3 = 128;
  4. Integer int4 = 128;

  5. System.out.println(int1 == int2);
  6. System.out.println(int3 == int4);
复制代码
第一句打印为true,第二句打印为false


这是因为integer有一个类似缓存的处理,他对一个字节以内的数(-128-127之间)都是通过引用来调用,超过1个字节的integer就会另外创建对象了。


对于equals,由于equals是所有类的父类Object类中的一个方法,所以你可以重写这个方法来让他进行不同的比较返回不同的值,但是一般来说它表达的意思都应该是比较所显示的数据是否相等。
作者: 张邦庆    时间: 2011-11-1 18:13
其实跟哈希集合中的覆盖的equals()相同,检查表链中是否有相同的内容
作者: 咖啡    时间: 2011-11-1 20:27
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。


作者: lyz1024    时间: 2012-6-4 23:13
还没有机会尝试一下 帮顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2