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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阮金明 黑马帝   /  2011-11-17 19:55  /  3093 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学到反射,有个字节码比较问题,只能用==,equals和==的区别是什么?

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
equals()方法一般是用来覆盖的,在object类中equals的方法是==的意思,但在其他的类中,equals的方法不一样和==相等

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杨杰 黑马帝 2011-11-17 21:34:49
藤椅
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较

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

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

用一块内存,例如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

方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
面试常见题,这个是我在书上看的,整理出来,希望对你有帮助。

评分

参与人数 1技术分 +2 收起 理由
宁超 + 2 面试宝典里的?

查看全部评分

回复 使用道具 举报
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
Eg:s1 = new String("sony"); //创建的是字符串对象
s1.equals("sony"); //返回
trues1 == "sony" //返回false
//如果
s1 = "sony";
s1 == "sony" //返回true

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
咪咪 来自手机 黑马帝 2011-11-17 23:20:53
报纸
==主要是用来比较具体的值的,而equal是比较对象的,而类的字节码是确切的值而不是对象不是引用,所以比较字节码用==更合适。
回复 使用道具 举报
==:是用来来比较两个基本数据类型的数值是否相等或两个引用变量所指的地址是否相同
equals:是两个对象的深度比较,就是说两个对象里封装的内容是否一致

也不是太复杂吧

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
高庆亮 黑马帝 2011-11-17 23:34:00
7#
围观一下
回复 使用道具 举报
赵磊5 黑马帝 2011-11-18 08:01:45
8#
1.对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。
2.对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其
对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
3.如果是基本类型比较,那么只能用==来比较,不能用equals
4.对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
其实不复杂
回复 使用道具 举报
moonlight 黑马帝 2011-11-18 09:54:45
10#
(1)八大基本类型只能用"=="比较不能用equals比较。(2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。(3)对于字符串变量来说,使用“= =”和“equals()”方法比较字符串时,其比较方法不同。
“= =”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
laoyang 黑马帝 2011-11-18 13:28:34
11#
equals方法是Object类的一个方法,所有继承自Object类的类都会集成此方法,并且可以重载这个方法来实现各自的比较操作,而且jdk也正是推荐这种做法。所以开发人员尽可以在自己的类中实现自己的equals方法来完成自己特定的比较功能,所以各个类的equals方法与= =之间并没有绝对的关系,这要根据各自类中自己的实现情况来看。也就是说可能会有两种情况发生:equals方法和= =相同或者不相同。在多数情况下这两者的区别就是究竟是对对象的引用进行比较还是对对象的值进行比较(其他特殊情况此处不予考虑)。那么= =操作符是比较的什么呢?= =操作符是比较的对象的引用而不是对象的值。
回复 使用道具 举报
Object类是所有类的根类,所以所有的对象都具有equals()方法的,equals比较的是两个对象的地址,一般都是要重写的,而比较字节码是比较两个确定的值,所以要用equals,老师视频也讲的很清楚啊,多看几遍哈,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马