java基础:==和equals方法区别

equals()和“==”操做用于对象的比较,检查俩对象的相等性,可是他们俩的主要区别在于前者是方法后者是操做符。因为java不支持操做符重载(overloading),“==”的行为对于每一个对象来讲与equals()是彻底相同的,可是equals()能够基于业务规则的不一样而重写(overridden )。另外一个须要注意的不一样点是“==”习惯用于原生(primitive)类型之间的比较,而equals()仅用于对象之间的比较。同时初学者奋力地想找到何时使用等号操做“==”,何时使用equals方法。这篇教程中你将将看到equals()方法和“==”操做是若是工做的、他们之间有什么不一样、何时用“==”、何时使用equals()方法。java

“==”等号操做是什么编程

“==”或等号操做在Java编程语言中是一个二元操做符,用于比较原生类型和对象。就原生类型如boolean、int、float来讲,使用“==”来比较二者,这个很好掌握。可是在比较对象的时候,就会与equals()形成困惑。“==”对比两个对象基于内存引用,若是两个对象的引用彻底相同(指向同一个对象)时,“==”操做将返回true,不然返回false。dom

什么是equals方法编程语言

equals()方法定义在Object类里面,根据具体的业务逻辑来定义该方法,用于检查两个对象的相等性。例如:两个Employees被认为是相等的若是他们有相同的empId的话,你能够在你本身的domain对象中重写equals方法用于比较哪两个对象相等。equals与hashcode是有契约的(不管何时你重写了equals方法,你一样要重写hashcode()方法),默认的equals方法实现是与“==”操做同样的,基于业务需求重写equals方法是最好的实践之一,一样equals与compareTo保持一致也不足为奇,以致于存储对象在Treemap或treeset集合中时,将使用compareTo方法检查相等性,行为是一致的。code

==与equals方法的区别对象

==与equals的主要区别是:==经常使用于比较原生类型,而equals()方法用于检查对象的相等性。另外一个不一样的点是:若是==和equals()用于比较对象,当两个引用地址相同,==返回true。而equals()能够返回true或者false主要取决于重写实现。最多见的一个例子,字符串的比较,不一样状况==和equals()返回不一样的结果。教程

字符串的==和equals对比内存

字符串的比较是一个常见的情景,由于java.lang.String类重写了equals方法,它返回true若是两个字符串对象包含有相同的内容,可是==只有他们的引用地址相同时才返回true,下面这个例子就是经过==和equals方法分别比较两个字符串。字符串

String personalLoan = new String("cheap personal loans");
String homeLoan = new String("cheap personal loans");

//since two strings are different object result should be false
boolean result = personalLoan == homeLoan;
System.out.println("Comparing two strings with == operator: " + result);

//since strings contains same content , equals() should return true
result = personalLoan.equals(homeLoan);
System.out.println("Comparing two Strings with same content using equals method: " + result);

homeLoan = personalLoan;
//since both homeLoan and personalLoand reference variable are pointing to same object
//"==" should return true
result = (personalLoan == homeLoan);
System.out.println("Comparing two reference pointing to same String with == operator: " + result);

Output:
Comparing two strings with == operator: false
Comparing two Strings with same content using equals method: true
Comparing two reference pointing to same String with == operator: true

==与equals在对象之间的对比
另外一中情景是:当你对比两个对象时,在选择==和equals方法中很容易困惑,当你比较的两个引用指向的对象是Object的类型的时候,那么你看到的结果和==是一致的,由于默认的equals方法实现仅仅比较的内存地址。若是两个引用变量彻底指向的是同一个对象的话就返回true,下面这个例子是equals和==方法操做比较的是两个对象。string

Object obj1 = new Object();
Object obj2 = new Object();

// == should return false
result = (obj1==obj2);
System.out.println("Comparing two different Objects with == operator: " + result);

//equals should return false because obj1 and obj2 are different
result = obj1.equals(obj2);
System.out.println("Comparing two different Objects with equals() method: " + result);

// "==" should return true because both obj1 and obj2 points same object
obj1=obj2;
result = (obj1==obj2);
System.out.println("Comparing two reference pointing to same Object with == operator: " + result);

Output:
Comparing two different Objects with == operator: false
Comparing two different Objects with equals() method: false
Comparing two reference pointing to same Object with == operator: true

总结:

  1. 使用==比较原生类型如:boolean、int、char等等,使用equals()比较对象。
  2. ==返回true若是两个引用指向相同的对象,equals()的返回结果依赖于具体业务实现
  3. 字符串的对比使用equals()代替==操做符

以上就是关于equals方法和==操做符的区别,其主要的不一样是一个是操做符一个是方法,==用于对比原生类型而equals()方法比较对象的相等性。

相关文章
相关标签/搜索