黑马程序员技术交流社区

标题: "=="与"equals" [打印本页]

作者: 刘涛    时间: 2011-11-25 10:41
标题: "=="与"equals"
本帖最后由 刘涛 于 2011-11-28 18:14 编辑

String str1 = "abc";
String str2 = new String("abc");

s.o.p (s1==s2);
s.o.p (s1.equals(s2));
输出结果 :
false
ture

请问 == 判断的是什么 ?
       equals判断的又是什么呢 ?
作者: 冯敏    时间: 2011-11-25 10:47
== 比较对象的引用是否相同,引用也就是对象地址
equals比较的是对象的内容
另外,String类是不能更改的,如果内容一样,它会另开辟一个空间,

作者: zhou_411424    时间: 2011-11-25 10:51
equals 是比较的两个字符串是否一样
比如 “asd”.equals(“asd”)==true;
"==" 它比较的是两个“引用”
比如:
String a=new String ("a");
String b=new String ("a");
System.out.println(a==b)它就输出false了
因为不是一个引用啊(虽然都是a);
作者: 侯伟浩    时间: 2011-11-25 11:04
"=="是用来比较两个对象的引用的,equals是比较内容的。如:
  1. public class My2 {
  2.         public static void main(String args[])
  3.         {
  4.                 String str=new String("abc");
  5.                 String str2=new String("abc");
  6.                 System.out.println(str==str2);            //false
  7.                 System.out.println(str.equals(str2));    //true
  8.         }       
  9. }
复制代码

作者: 刘永昌    时间: 2011-11-25 13:14
我记得这个问题以前有人问过

这是以前回答的很仔细的帖子,与你共享一下

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较

两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

   如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占

用一块内存,例如Objetobj=newObject();变量obj是一个内存,newObject()是另一个内存,此时,变量obj所对应

的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对

象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

   equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独

立的。例如,对于下面的代码:

   Stringa=newString("foo");

   Stringb=newString("foo");

   两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地

址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所

以,表达式a.equals(b)将返回true。

   在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,Stringinput= …;input.equals(“quit”),许

多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。

记住,字符串的比较基本上都是使用equals方法。

   如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码

如下:

   booleanequals(Objecto){

     returnthis==o;

    }

    这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,

也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独

立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals

方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
面试常见题,这个是我在书上看的,整理出来,希望对你有帮助。
作者: laizidiyu    时间: 2011-11-25 15:42
equals 只是比较值是否相同
而==则是比较两个变量 是不是同一个变量.也应时是说
要看看这两个变量是不是引用的同一个地址.
java 中只有引用地址相同的两个变量才被视为==

作者: laizidiyu    时间: 2011-11-25 15:43
简单点就是hiequals 只是比较值是否相同
而==则是比较两个变量 是不是同一个变量.也应时是说
要看看这两个变量是不是引用的同一个地址.
java 中只有引用地址相同的两个变量才被视为==





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