equals()和==到底有什么区别啊?

郁闷,越看越糊涂

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"比"=="运行速度要慢。

扩展资料

equals()方法特点:

1、自反性:x.equals(x)返回true;

2、对称性:若x.equals(y)为true,则y.equals(x)亦为true;

3、传递性:若x.equals(y)为true且y.equals(z)也为true,则x.equals(z)亦为true;

4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也均为true,前提条件是没有修改x也没有修改y;

5、对于非空引用x,x.equals(null)永远返回为false。

参考资料:百度百科-equals

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-11-05

equals()和==的区别:

一、对象类型不同

1、equals():是超类Object中的方法。

2、==:是操作符。

二、比较的对象不同

1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。

2、==:用于比较引用和比较基本数据类型时具有不同的功能。

三、运行速度不同

1、equals():没有==运行速度快。

2、==:运行速度比equals()快,因为==只是比较引用。

equals()和==的实例应用:

扩展资料:

equals()和==的源码定义:

public boolean equals(Object obj) {

return (this == obj);


由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写。

但是没有对equals进行重写的类就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非在此类中重写equals。

对equals重新需要注意五点:

1、自反性:对任意引用值X,x.equals(x)的返回值一定为true;

2、对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;

3、传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true ;

4、 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变;

5、非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 。

==:

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

1、比较的是操作符两端的操作数是否是同一个对象。

2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。

3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:

int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。

equals:

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

String s="abce"是一种非常特殊的形式,和new 有本质的区别。它是java中唯一不需要new 就可以产生对象的途径。

以String s="abce";形式赋值在java中叫直接量,它是在常量池中而不是象new一样放在压缩堆中。这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abcd"的对象。

如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个“abcd"”,下一次如果有Strings1="abcd";又会将s1指向“abcd”这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象。

而String s=new String("abcd”);和其它任何对象一样.每调用一次就产生一个对象,只要它们调用。

也可以这么理解:String str="hello”;先在内存中找是不是有“hello”这个对象,如果有,就让str指向那个“hello”。

如果内存里没有"hello",就创建一个新的对象保存"hello”.String str=new String(“hello")就是不管内存里是不是已经有"hello"这个对象,都新建一个对象保存"hello"。

本回答被网友采纳
第2个回答  推荐于2019-08-27

equals()和==的区别:

1、对象类型不同

equals()是超类Object中的方法。

==是操作符。

2、比较的对象不同

equals()用来检测两个对象是否相等,即两个对象的内容是否相等。

==用于比较引用和比较基本数据类型时具有不同的功能。

扩展资料

java中所有类的父类是Object类,在Object中,已经定义了一个equals()方法,但是这个默认的equals()方法实际上也只是测试两个变量引用是否指向同一对象(即与 == 功能一样)。所以它并不一定能得到你所期望的效果。

通常我们需要自己将定义的类(就是上面的TestEqual)中的equals()进行重写。像Integer封装类就已经重写了Object中的equals()方法,直接可以拿来比较引用类型c和d指向的对象的值。

在Object类当中定义的equals方法:

public boolean equals(Object obj) {return (this == obj);}

本回答被网友采纳
第3个回答  推荐于2018-04-20
凡是比较基本类型只能用==,比较结果你看到的字面值相等就会相等,什么叫基本类型? byte,short,int,long,char,float,double这几种就是基本类型.基本类型不是对象所以不存在用equals比较.
凡是比较引用类型(对象),==比较的是两个引用是不是指向同一个内存地址,equals比较的是两个引用的字面值是不是相同,什么叫字面值?你能看到的值就是字面值,比如:String s="abc"; abc就是字面值.
基本类型的包装类型是对象类型,所以除非两个相同字面值的引用指向同一内存地址,值才会相等,比如:
Integer a=new Integer(3);Integer b=a;//互相赋值
这样用等号或equals比较都会得出true,记住一点,凡是两个引用都用了new去初始化,那==比较的结果都只会是false,互相之间有了赋值,比较结果就为true.
比较不好理解的一点:
String a="abc";
String b="abc";
a==b和a.equals(b);结果都会为true,因为没有用new去新建对象,其实a和b都指向的是同一个String对象"abc",改成:
String a=new String("abc");
String b=new String"abc");
后==的结果就是false了.总之参照上面的说明,不难理解.本回答被提问者和网友采纳
第4个回答  2008-01-16
在比较字符型数据时,==比较的是内存中的地址,是对象的句柄
而equals()比较的是地址内的内容,比较的是对象.

equals()和==到底有什么区别啊?
1、功能不同 "=="是判断两个变量或实例是不是指向同一个内存空间。"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。2、定义不同 "equals"在JAVA中是一个方法。"=="在JAVA中只是一个运算符合。例子:Student student1 = new Student();Student student2 = new Student();System.o...

“==” 和 EQUALS 的区别是什么?
==和equals的区别有对象类型不同、比较的对象不同、运行速度不同。一、对象类型不同:1、equals():是超类Object中的方法。2、==:是操作符。二、比较的对象不同:1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。2、==:用于比较引用和比较基本数据类型时具有不同的功...

简述==与equals()方法的区别。
简述==与equals()方法的区别。如下:1.equals是方法,而==是操作符。2.对于基本类型的变量来说(如short、int、long、float、double),只能使用==,因为这些基本类型的变量没有equals方法。对于基本类型变量的比较,使用==比较,一般比较的是它们的值。3.对于引用类型的变量来说(例如String类)才有equal...

java中equals和==的区别
在Java中,equals()方法和==运算符的主要区别在于,equals()用于比较对象的内容是否相等,而==运算符用于比较对象的引用是否相等。一、equals()方法 equals()方法是Java.lang.Object类的一部分,它是用于比较对象的内容是否相等的方法。当我们使用equals()方法比较两个对象时,它比较的是这两个对象的值...

== 和 equals 的区别是什么?
在Java中,“==”和“equals()”的区别如下:- “==”是比较运算符,用于比较两个变量或实例是否指向同一个内存空间,即比较它们的地址是否相同。对于基本数据类型(如short、int、long、float、double),只能使用“==”,因为这些基本类型的变量没有重写equals()方法。对于引用类型的变量来说(例如...

Java中比较两个字符串==和.equals()区别
在Java中,==和.equals()都是用于比较字符串是否相等的工具,但它们的运作原理有所不同。==比较的是两个字符串的引用地址,意味着它检查的是变量是否指向同一个内存位置。若两个字符串变量指向同一字符串常量池中的对象,==比较将返回真值;反之,则返回假值。.equals()方法则比较的是字符串的内容...

String使用equals和==比较的区别
== 和 Equals 的区别 1. == 是一个运算符。2.Equals则是string对象的方法,可以.(点)出来。比较无非就是这两种 1、基本数据类型比较 2、引用对象比较 1、基本数据类型比较 ==和Equals都比较两个值是否相等。相等为true 否则为false;2、引用对象比较 ==和Equals都是比较栈内存中的地址是否相等...

.equals()到底是什么意思?
.equals() 在Java中判断是否相等,与 == 的区别是 .equals() 只判断值是否相等,不管两者是否存在同一地址。而 == 则是判断值与存在地址都得相等

“==”和“equals”的区别?
即栈中的内容是否相同。equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。常用于网络,由两个等于号组成,但要注意与代"等等"的"=="区别开来。"=="中间是没有空格的。

带你区别equals和==
首先,理解==和equals。==比较的是基本数据类型或引用是否指向同一对象。而equals方法用于类对象,用于比较对象内容是否相同。任何类都继承自Object类,其中equals默认实现方式是通过==进行比较。基本数据类型没有equals方法,因此不能使用equals进行比较。在Object类中,equals方法默认通过==比较对象引用。如果...

相似回答