A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a464538715 中级黑马   /  2013-6-3 20:13  /  1892 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 a464538715 于 2013-6-4 14:46 编辑

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

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

14 个回复

正序浏览
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方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。
回复 使用道具 举报
也有基本数据类型
回复 使用道具 举报
First 发表于 2013-6-3 22:26
简单的说 == 比较的是栈内存中的内容,而 equals 比较的一般是堆内存中的内容
当然,也不完全是这样,Objec ...

栈内存中的内容就是地址值吧  
回复 使用道具 举报
菜鸟来看看,学学知识。嘿嘿
回复 使用道具 举报
简单的说 == 比较的是栈内存中的内容,而 equals 比较的一般是堆内存中的内容
当然,也不完全是这样,Object 类 equals方法就是用的 ==。
回复 使用道具 举报
其实我以前错误的认为== 就是 调用hashCode方法比较 其实不是的==就是比较堆内存中地址值 而hashCode只是通过地址生成的一个东西 但是又不能当成地址对待
回复 使用道具 举报
youngster 发表于 2013-6-3 20:51
==是比较运算符,运算符,=也是运算符,等号使用的时候调用的是什么方法呢?我没有了解到那么深入。
equ ...

你认为hashCode方法有什么用
回复 使用道具 举报
a464538715 发表于 2013-6-3 20:35
你肯定是copy的 因为你根本没看清楚我问什么

==是比较运算符,运算符,=也是运算符,等号使用的时候调用的是什么方法呢?我没有了解到那么深入。
equals叫做方法,方法调用的时候是一段代码,equals方法也是用==实现的,
楼主:我真不知道==是在调用什么方法,如果你研究透了,请告之。

点评

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

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
双等号==做比较 的时候不是对值做比较,而是对 对象的引用做比较,也就是说对内存地址做比较。如果是基本类型的话,就是对值做比较的。
回复 使用道具 举报
youngster 发表于 2013-6-3 20:31
equals是个方法,==比较对象的引用是不是同一个
=和==的区别
"="是赋值运算符,将等号右边的值赋给左边变量 ...

你肯定是copy的 因为你根本没看清楚我问什么
回复 使用道具 举报
equals是个方法,==比较对象的引用是不是同一个
=和==的区别
"="是赋值运算符,将等号右边的值赋给左边变量。
"=="是比较运算符,是判断左右两边的值是否相等。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马