黑马程序员技术交流社区

标题: Java中"=="和equals("")的具体区别 [打印本页]

作者: 沐有鱼丸    时间: 2013-6-16 16:01
标题: Java中"=="和equals("")的具体区别
本帖最后由 Super_Class 于 2013-6-17 09:48 编辑

关于==和equal()理解不是很清晰,使用基本数据类型和引用数据类型时,他们的区别是什么

作者: 薛淑凯    时间: 2013-6-16 16:40
这样的问题太多了,你可以找找去
作者: 刘晓    时间: 2013-6-16 16:40
equals 是方法,用来检测两个对象的内容是否相等。
==是符号,他比较的是一个对象在内存中的地址值。
比较引用和比较基本数据类型时具有不同的功能:比较基本数据类型,如果两个值相同,则结果为true 而在比较引用时,如果引用指向内存中的同一对象,结果为true
作者: 万琪    时间: 2013-6-16 16:42
这个问题,,你应该好好想想了- -

听是永远听不懂的,,要自己去试试,,,

每次用equals前先打印变量,,看看是值还是地址,,是不是一样,,
  1. string b = "a";
  2. string a = "a";
  3. string c = new string ("a");
  4. syso(a);
  5. syso(b);
  6. syso(c);
复制代码
...这样慢慢试着就应该懂了,,,,
另外,,引用数据类型和基本数据类型你要了解。。。。。
作者: 姚志远    时间: 2013-6-16 16:44
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals
方法是用于比较两个独立对象的内容是否相同,例如
String a =new String("abc");
String b =new String("abc");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,
这时就不能用==而是用equals

作者: shang1jk    时间: 2013-6-16 17:11
==判断是否是同一个对象.

Object的equals方法的源代码默认也是使用==运算符进行对比的, 但是通常使用的时候都重写equals方法, 用以判断两个对象的"内容"是否相同.
  1. //正常重写equals方法之后
  2. Student st1 = new Student("datou",18);
  3. Student st2 = new Student("datou",18);
复制代码
他们equals却不==.
作者: 傻瓜一点红    时间: 2013-6-16 17:40
张孝祥老师的答案:

  (单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)
  ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
  如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
  equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
  String a=new String("foo");
  String b=new String("foo");
  两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
  在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。
  如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
  boolean equals(Object o){
   return this==o;
  }
  这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
作者: 林森~Linson    时间: 2013-6-16 18:11
对对象之间的比较:
==比的是两个对象的地址是否相同
equals比的是数据内容是否相同。

对数值类型来说:
==表示是否等于某个值。比如:int a=4; if(a==5){}
作者: 沐有鱼丸    时间: 2013-6-16 18:28
问题以解决啦 谢谢大家的回答  就是不知道怎么改成已解决啊
作者: ytblght55    时间: 2013-6-17 07:33
我也没办法改已解决,纠结得很啊!!
作者: Super_Class    时间: 2013-6-17 09:49
您好楼主,已帮您更改为以已解决:)




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