String类中"=="和equals()方法比较的区别

qq_42159526 2018-12-06 11:22:07
(1)"=="是Java提供的关系运算符,主要的功能是进行数值相等判断的,如果用在了String对象上表示的是内存地址数值的比较。 (2)equals()方法是由String提供的一个方法,此方法专门负责进行字符串内容的比较。
...全文
855 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42591591 2019-01-09
  • 打赏
  • 举报
回复
java中关系运算符有< <= == != > >=
这些运算符都适用于基本数据类型,但是对于Boolean来说,只有==和!=可以进行比较。
对于对象来说 ==和!=比较的是对象引用,也就是说如果两个引用指向同一个对象,那么就返回true,否则返回false。
那么,我们如果有比较对象内容的需求呢,也就是不管几个对象,只要对象内容相同,就让两者相同,应该怎么办呢?
那就是重写equals方法。
equals方法是Java object中的基本方法,任何类都有,但是它默认是比较引用,所以我们必须对其进行重写。
Java实现的大部分类都重写了该方法,让我们可以比较。
如果我们自己写类,必须重写此方法。
whatswronginyou 2019-01-09
  • 打赏
  • 举报
回复
好比去吃饭啊,equals() 就是你要吃跟昨天一样的菜,== 就是你就要昨天你已经吃了的那份饭菜,
------ 2019-01-05
  • 打赏
  • 举报
回复
我用到的会重写类的equals方法,用来比较两个对象值是否相同。
weixin_40981213 2019-01-04
  • 打赏
  • 举报
回复
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如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方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
梩屿 2019-01-02
  • 打赏
  • 举报
回复
“==”运算符对于基本数据类型来讲是比较数据;
对于引用数据类型来讲是比较地址值。

equals()方法-->public boolean equals(Object obj);//比较字符串与传入的参数(任意类型)内容是否相同(区分大小写),只有参数是字符串且内容相同时才为true。
JoinW 2018-12-07
  • 打赏
  • 举报
回复
能用eq就不要用==
yuji_tt 2018-12-07
  • 打赏
  • 举报
回复
如果是比字符串内容就是eq,比对象是否是一个那就==
qybao 2018-12-06
  • 打赏
  • 举报
回复
== 对于简单类型是值比较,对于对象类型是地址比较
equals是方法,通常是比较两个对象的hashCode,对于字符串,hashCode是通过字符串的内容算出来的,所以间接可以比较两个的内容
《经过》 2018-12-06
  • 打赏
  • 举报
回复
补充楼上:equals()方法 是继承Object的,原本比较的也是引用的地址,后改写为字面值
望舒 2018-12-06
  • 打赏
  • 举报
回复
比引用 和 比内容
萝萝卜卜 2018-12-06
  • 打赏
  • 举报
回复
比较String时,==比较的是变量的地址(两个不同地址的变量,即使内容相同,==后返回的也是false),equal比较的是内容,一般都用equal
JustoneRookie 2018-12-06
  • 打赏
  • 举报
回复
String中的类是重写了object类里的equal()方法,而在原本的object类中,equal方法本来就是比较地。
三三两 2018-12-06
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_39548940/article/details/76099526.html
三三两 2018-12-06
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_39548940/article/details/76099526
十八道胡同 2018-12-06
  • 打赏
  • 举报
回复
对的,对的。


昨天就这个问题还调查了半天,发现==原来比较的是地址。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧