黑马程序员技术交流社区

标题: 关于== [打印本页]

作者: a464538715    时间: 2013-6-3 20:13
标题: 关于==
本帖最后由 a464538715 于 2013-6-4 14:46 编辑

当使用==调用的是什么方法?
比较的又是什么?

作者: youngster    时间: 2013-6-3 20:31
equals是个方法,==比较对象的引用是不是同一个
=和==的区别
"="是赋值运算符,将等号右边的值赋给左边变量。
"=="是比较运算符,是判断左右两边的值是否相等。

作者: a464538715    时间: 2013-6-3 20:35
youngster 发表于 2013-6-3 20:31
equals是个方法,==比较对象的引用是不是同一个
=和==的区别
"="是赋值运算符,将等号右边的值赋给左边变量 ...

你肯定是copy的 因为你根本没看清楚我问什么
作者: 想、一个人    时间: 2013-6-3 20:44
双等号==做比较 的时候不是对值做比较,而是对 对象的引用做比较,也就是说对内存地址做比较。如果是基本类型的话,就是对值做比较的。
作者: 飞鸟青崖    时间: 2013-6-3 20:47
==是关系操作运算符,什么方法也不调用。说明白点:它就是数学中的“=”,比较两个数是否相等的。只不过在Java中“=”被当作赋值了,所以用“==”来表示数学中的“=”。
如果“==”两边是对象的引用,它比较的这两个引用所代表的值。可以认为引用的值就是它所指向的对象的地址。这个时候就是比较两个对象的地址是不是相同了。但地址是在new对象的时候就已经赋值给了引用,并不是在==的时候才调用的new产生地址的。所以==不会调用任何方法。
一般容易混淆的就是==和equals的区别。但两者的区别很简单,==只是比较左右两边本身的值,不管它是否是基本数据类型还是引用数据类型。对于equals默认比较的是哈希值。不过不同的类可能会覆盖这个方法(如String),那就需要具体情况具体分析了。
作者: youngster    时间: 2013-6-3 20:51
==是比较运算符,运算符,=也是运算符,等号使用的时候调用的是什么方法呢?我没有了解到那么深入。
equals叫做方法,方法调用的时候是一段代码,equals方法也是用==实现的,
楼主:我真不知道==是在调用什么方法,如果你研究透了,请告之。
作者: youngster    时间: 2013-6-3 20:51
a464538715 发表于 2013-6-3 20:35
你肯定是copy的 因为你根本没看清楚我问什么

==是比较运算符,运算符,=也是运算符,等号使用的时候调用的是什么方法呢?我没有了解到那么深入。
equals叫做方法,方法调用的时候是一段代码,equals方法也是用==实现的,
楼主:我真不知道==是在调用什么方法,如果你研究透了,请告之。
作者: a464538715    时间: 2013-6-3 21:08
youngster 发表于 2013-6-3 20:51
==是比较运算符,运算符,=也是运算符,等号使用的时候调用的是什么方法呢?我没有了解到那么深入。
equ ...

你认为hashCode方法有什么用
作者: a464538715    时间: 2013-6-3 21:21
其实我以前错误的认为== 就是 调用hashCode方法比较 其实不是的==就是比较堆内存中地址值 而hashCode只是通过地址生成的一个东西 但是又不能当成地址对待
作者: First    时间: 2013-6-3 22:26
简单的说 == 比较的是栈内存中的内容,而 equals 比较的一般是堆内存中的内容
当然,也不完全是这样,Object 类 equals方法就是用的 ==。
作者: peerless2012    时间: 2013-6-3 22:34
菜鸟来看看,学学知识。嘿嘿
作者: a464538715    时间: 2013-6-3 22:54
First 发表于 2013-6-3 22:26
简单的说 == 比较的是栈内存中的内容,而 equals 比较的一般是堆内存中的内容
当然,也不完全是这样,Objec ...

栈内存中的内容就是地址值吧  
作者: First    时间: 2013-6-3 23:16
也有基本数据类型
作者: 花心々小土豆    时间: 2013-6-4 09:29
a464538715 发表于 2013-6-3 21:21
其实我以前错误的认为== 就是 调用hashCode方法比较 其实不是的==就是比较堆内存中地址值 而hashCode只是通 ...

楼主这样想hashCode方法非常靠谱,记得以前有个哥们提问说hashCode()返回的值会不会越界?!哈希法存储结构中为了避免元素冲突而人为约定的一种解决规则,在Java中这种规则就是hashCode(),既然是人为约定的,我们就可以对它进行重写,当然它的有多大我们说了算!!
解释一下==号,他比较的是一个对象在内存中的地址值,比如2个字符串对象
String s1 = new String("abc");
String s2 = new String("abc");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
equals是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。
Object类源码:
public boolean equals(Object obj)
{
      return (this == obj);
}
它同样使用==号进行内存地址的比较。equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。




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