黑马程序员技术交流社区

标题: "=="和"equals"的区别? [打印本页]

作者: simonqian    时间: 2013-5-25 09:15
标题: "=="和"equals"的区别?
本帖最后由 simonqian 于 2013-5-28 21:30 编辑

if(field.getType().equals(String.class))
if(field.getType() == String.class)
以上2个比较哪个好?为什么?
作者: jinhu358    时间: 2013-5-25 09:26
==好
==是真正意义上的两个引用指向同一个对象
equals嘛就是语义上的相等,就是一个方法随便你怎么写,如果你认为两个对象相等重新写这个方法设法让这个比较成立就是了
作者: 曹睿翔    时间: 2013-5-25 10:07
第二种。原因,谁来答,给分
作者: jinhu358    时间: 2013-5-25 10:52
这里比较的是String.class在内存中只有一份,所以直接比较地址比较好  用==
作者: ____囧    时间: 2013-5-25 11:13
本帖最后由 ____囧 于 2013-5-25 11:18 编辑

==的作用:
1.是比较引用是否相等.
2. 比较两个基本类型是否相等.
equals的作用:
用于比较内容是否相同.
什么情况用什么方法.
楼主所说的例子用==比较好!
作者: Changer_s    时间: 2013-5-25 18:10
equals 与==的区别
equals在于比较表象,比如:外表看上去有文化,仅仅停留在表象(表象就是你看上去就晓得)
==在于比较内涵(也就是内存地址),比如:他外表看上去有文化,内在也是有文化的(内在你要深入的去调查)
field.getType() 与String.class不仅仅停留在表象(你完全看不出来),这是比较深层次的东西,所以要用==
这样去理解,能接受吗?


作者: 曹宇    时间: 2013-5-25 19:06
学习了!!!!!!!
作者: 穆爱明    时间: 2013-5-25 19:45
==和equals()方法都可以用来判断字符串,但所判断的内容是有差别的。简单说,==判断的是两个字符串对象在内存中的首地址,就是判断是否是同一个字符串对象,而equals()方法判断的是两个字符串对象的值是否相等。例如:
  1. String str1 = new String("我是黑马人");
  2.                 String str2 = new String("我是黑马人");
  3.                 if (str1 == str2) {
  4.                         System.out.println("两个字符串相同");

  5.                 } else {
  6.                         System.out.println("两个字符串不同");
  7.                 }
  8.                 if (str1.equals(str2)) {
  9.                         System.out.println("两个字符串值相同");
  10.                 } else {
  11.                         System.out.println("连个字符串值不同");
  12.                 }
复制代码
输出结果:两个字符串不同
                两个字符串值相同
这是我的知道的,希望可以帮到你。



作者: 胡浩    时间: 2013-5-25 20:05
Changer_s 发表于 2013-5-25 18:10
equals 与==的区别
equals在于比较表象,比如:外表看上去有文化,仅仅停留在表象(表象就是你看上去就晓得 ...

小头,你太有内涵了。
作者: Changer_s    时间: 2013-5-25 20:13
胡浩 发表于 2013-5-25 20:05
小头,你太有内涵了。

你太夸张了,活结!!!个人理解而已
作者: 神之梦    时间: 2013-5-25 20:59
本帖最后由 神之梦 于 2013-5-25 21:01 编辑

毕老师教会俺怎么看上帝的时候,我在上帝里面找到了equals方法的代码,是这样的

所以我一直非常疑惑部分人的解释,头晕{:soso_e134:}
---------------------------------------------------------------------云青年屌丝一枚---------------------------------------------------------------------

作者: 曹睿翔    时间: 2013-5-25 21:23
本帖最后由 神之梦 于 2014-6-8 22:11 编辑
神之梦 发表于 2013-5-25 20:59
毕老师教会俺怎么看上帝的时候,我在上帝里面找到了equals方法的代码,是这样的

所以我一直非常疑惑部分人 ...


神之梦,可发现你了,小心你的技术分,这也晕!
final String类继承Object,覆盖其toString方法,你读读这个源码,你就明白了,
先比较地址,地址相同那就是同一个字符串
不行就再比较字符串长度,还相等就一个一个字符比较!

作者: 神之梦    时间: 2013-5-25 21:30
本帖最后由 神之梦 于 2014-6-8 22:13 编辑
曹睿翔 发表于 2013-5-25 21:23
神之梦,可发现你了,小心你的技术分,这也晕!
final String类继承Object,覆盖其toString方法,你读读这个 ...

我很明确的说,String这个东东我还没学到,好像有一节是专门讲这个东东的,
你要复习也找个我看得懂的好吧,
可怜我天天逛论坛,赚点技术分容易么:dizzy:
作者: 曹睿翔    时间: 2013-5-25 21:32
神之梦 发表于 2013-5-25 21:30
我很明确的说,String这个东东我还没学到,好像有一节是专门讲这个东东的,
你要复习也找个我看得懂的好 ...

哈哈,逗你呢,干嘛这么严肃,扎扎实实的学,有疑问记下,这是好事
作者: xiewen    时间: 2013-5-25 22:15
本帖最后由 xiewen 于 2013-5-25 22:16 编辑

你这里比较的是类的字节码对象,每个类在内存中只有一份字节码文件,也就是说每个字节吗对象只有一个引用地址,所以这里用“==”比较好
下面我说说“==”和equals的区别:
         ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

     如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如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方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
                                           黑马云青年为您解答




作者: 毛杰    时间: 2013-5-28 18:23
看类来区别
大部分情况下都是相等的
特殊的一些类,有改写过equals()方法

“==”运算符的比较规则:只有两个变量引用的是同一个对象时,比较的结果才为true
"equals()"只要求两个对象的类型一致,并且内容相同(不能同时为null),比较的结果为true
作者: 袁梦希    时间: 2013-5-28 21:14
Changer_s 发表于 2013-5-25 18:10
equals 与==的区别
equals在于比较表象,比如:外表看上去有文化,仅仅停留在表象(表象就是你看上去就晓得 ...

小头  加油
作者: simonqian    时间: 2013-5-28 21:30
谢谢楼上的各位,我是彻底搞清楚了!3Q了




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