请问 java中 ==和equals 的区别 ?

麻烦举例一下他们分别什么时候用呢... 麻烦举例一下
他们分别什么时候用呢
展开
 我来答
帐号已注销
推荐于2019-08-11 · TA获得超过1.7万个赞
知道答主
回答量:41
采纳率:0%
帮助的人:1.4万
展开全部

区别:

1、功能不同

"=="是判断两个变量或实例是不是指向同一个内存空间。

"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。

2、定义不同

"equals"在JAVA中是一个方法。

"=="在JAVA中只是一个运算符合。

例子:

Student student1 = new Student();

Student student2 = new Student();

System.out.println(student1.equals(student2));

System.out.println(student1 == student2);

3、运行速度不同

"=="比"equals"运行速度快,因为"=="只是比较引用。

"equals"比"=="运行速度要慢。

参考资料:百度百科 JAVA基础

Bluewinger
推荐于2017-10-11 · TA获得超过116个赞
知道答主
回答量:46
采纳率:0%
帮助的人:0
展开全部
=操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则a==b将是true。
但不好理解的地方是:
String a=new String( "foo ");
String b=new String( "foo ");
则a==b将返回false。

对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为 "foo "的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用 "== "操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是 "foo ",应该是“相等”,但是==操作符并不涉及到对象内容的比较。
对象内容的比较,正是equals方法做的事。

看一下Object对象的equals方法是如何实现的:
boolean equals(Object o){

return this==o;

}
Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。

看一下一个极端的类:
Class Monster{
private String content;
...
boolean equals(Object another){ return true;}

}
我覆盖了equals方法。这个实现会导致无论Monster实例内容如何,它们之间的比较永远返回true。

所以当你是用equals方法判断对象的内容是否相等,请不要想当然。因为可能你认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列码的集合(HashSet,HashMap,HashTable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陆北梁丘伟兆
2020-02-23 · TA获得超过3747个赞
知道大有可为答主
回答量:3052
采纳率:27%
帮助的人:203万
展开全部
==:是比较它们的内存空间是不是相同的,而
equals:是比较它们的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慈怀梦Rz
2019-02-21 · TA获得超过3894个赞
知道大有可为答主
回答量:3123
采纳率:24%
帮助的人:478万
展开全部
如果是
int
型的数据,那就用
==;如果是
String
型的数据,最好使用
equals,不要用
==
。String
型的数据有时比较的是他的地址,判断的时候,明明你没有写错,但是程序就是进不去,就是这个原因。我就遇见过很多次的这种情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可康泰卿媚
2019-09-04 · TA获得超过3.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:748万
展开全部
在没有override
equals()的时候,==和equals()都是一个意思,看两个reference是否指向同一个对象,而不是比较两个reference所指向的对象是否有相同的值
但是,wrapper
class
和string
class
的equals()已经被系统override了,他们都是比较对象的值而不是比较对象的地址
String
s1="abc";String
s2
="abc";
System.out.println
("s1==s2"
+
s1==s2);System.out.println("s1.equals(s2)"
+
s1.equals(s2));
result: s1==s2
falses1.equals(s2)
true
除了wrapper
class
和string
class,
在你没有override
equals()的时候,
==
和equals()是同一个意思class
A
{}
public
class
Test{
public
static
void
main(String[]
args)
A
a1
=
new
A();
A
a2
=
new
A();
A
a3
=
a1;
System.out.println("a1==a2"
+
(a1==a2));
System.out.println("a1==a3"
+
(a1==a3));
System.out.println("a1.equals(a2)"
+
a1.equals(a2));
System.out.println("a1.equals(a3)"
+
a1.equals(a3));}
result:
a1==a2
false
a1==a3
true
a1.equals(a2)
false
a1.equals(a3)
true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式