黑马程序员技术交流社区

标题: 关于equals()的一些小疑问 [打印本页]

作者: 陈虹旭    时间: 2012-10-2 16:14
标题: 关于equals()的一些小疑问
本帖最后由 陈虹旭 于 2012-10-2 17:21 编辑

以前看到很多同学讨论equals()和==的区别,但是不管是比较对象还是比较其他我都没有对他们说的区别有所理解!
今天在看异常中的某一个调用中又用到了这个方法的使用。
我想问的是:
equals() 这个方法,两个对象可以进行比较,两个字符串可以进行比较,为什么两个数字和两个字符比较会提示报错:NullPointException:无法取消引用?
这类报错该如何解决?
equals()究竟可以对什么进行比较,什么不可以比较呢?想比较常规下不能比较的内容,只能在对象中定义再比较两个对象才可以吗?


作者: 高照    时间: 2012-10-2 16:19
equals() 是对象的方法,基本数据类型不属于对象,不能调用equals() 方法。只有对象才能调用equals() 方法。
作者: 陈虹旭    时间: 2012-10-2 16:25
高照 发表于 2012-10-2 16:19
equals() 是对象的方法,基本数据类型不属于对象,不能调用equals() 方法。只有对象才能调用equals() 方法 ...

两个字符串也可以进行比较啊,那你的意思是说字符串也是对象吗?
作者: 古银平    时间: 2012-10-2 16:38
陈虹旭 发表于 2012-10-2 16:25
两个字符串也可以进行比较啊,那你的意思是说字符串也是对象吗?

对了,字符串就是对象,String是一个类,在jdk1.5以后的版本支持。String s ="abcde";相当于String s=new String("abcde");毕老师的13天的视频里有讲,而且String中是重写了Object中的equals()方法。

作者: 王中利    时间: 2012-10-2 16:54
equals()是对两个字符串对象中的字符是否相等的比较,他所指的是两个字符串,字符串是用""表示的,而简单的数据类型(包括数字和字符)是不能用equals进行比较的。
作者: 陈虹旭    时间: 2012-10-2 17:12
古银平 发表于 2012-10-2 16:38
对了,字符串就是对象,String是一个类,在jdk1.5以后的版本支持。String s ="abcde";相当于String s=new ...

明白了 谢谢指点
作者: 黑马-王燚    时间: 2012-10-2 17:36
两个字符串比较  两个对象比较   
1.首先,第一  两个对象比较,这里的equals 和 ==  就是一个作用了(前提是你根本没有去复写过equals方法),它们比较的是地址值,      而 字符串 是String类型, 你去查看下API就知道,它自己复写过equals方法,比较的是两个字符串的内容。
2.你说 两个数字 和 两个字符去比较,当然会报错了      数字 和 字符 属于基本数据类型,你去调用equals方法,你先想想, 基本数据类型  有equals方法么? 当然是没有了,既然没有equals方法 你调用equals方法是不是会报NullPointException的异常。。 如何解决  你可以自己手动对其 装箱,比如  
Integer  a=new Integer(4);  Integer  b=new Integer(5);   此时a和b 是引用数据类型了 就可以使用equals方法了。  字符的原理一样  你调用 Character 这个类来创建字符对象就行了。
作者: 陈虹旭    时间: 2012-10-2 17:45
黑马-王燚 发表于 2012-10-2 17:36
两个字符串比较  两个对象比较   
1.首先,第一  两个对象比较,这里的equals 和 ==  就是一个作用了(前提 ...

那也就是说equals()方法比较的都是引用数据类型的数据吗?
作者: 黑马-王燚    时间: 2012-10-2 17:53
陈虹旭 发表于 2012-10-2 17:45
那也就是说equals()方法比较的都是引用数据类型的数据吗?

对的,你查看 API 可以看到 public boolean equals(Object obj)   这里的参数已经限定死了,只能是Object  类类型(引用数据类型)
作者: 陈虹旭    时间: 2012-10-2 18:04
黑马-王燚 发表于 2012-10-2 17:53
对的,你查看 API 可以看到 public boolean equals(Object obj)   这里的参数已经限定死了,只能是Object ...

哦 明白了明白了 看来还是掌握的不够扎实啊 ...谢谢啊 !




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