java==运算符和equals()方法的区别有哪些

  介绍

小编给大家分享一下java==运算符和=()方法的区别有哪些,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用=方法。

<强> 1。==运算符

对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就会返回真的,然而如果是两个引用类型的变量,则分为两种情况:1)它们指向同一个对象,结果返回正确;2)它们指向不同的对象,即使对象内容相同,结果还是返回假;下面程序示范了使用==运算符比较两个变量是否相等的结果:

public  class  Test  {   ,public  static  void  main (String [], args), {   int 才能;a =, 5;   int 才能;b =, 5;   String 才能;s1 =,“helloJava";   String 才能;s2 =,“helloJava";   String 才能;s3 =,“hello" +“Java";   String 才能;s4 =,“hello";   String 才能;s5 =,“Java";   String 才能;s6 =, s4  +, s5;   String 才能;s7 =, new 字符串(“helloJava");   System.out.println才能(“==b ?:,“+ (a==b));   System.out.println才能(“s1==s2:,“+ (s1==s2));   System.out.println才能(“==s1 ?:“+ (s1==s3));   System.out.println才能(“s1==s6 ?:,“+==s6) (s1);   System.out.println才能(“s1==s7 ?:,“+==s7) (s1);   System.out.println才能(“s1.equals (s6) ?:,“+ (s1.equals (s6)));   System.out.println才能(“s1.equals (s7) ?:,“+ (s1.equals (s7)));   ,}   }

运行结果为:

==b吗?:真正的s1==s2
?:真
==s1吗?:真
s1==s6吗?:假
s1==s7 ?:假
s1.equals (s6) ?:真
s1.equals (s7) ?:真正的

结果分析:两个int类型的a和b相等,不需要多解释,s1, s2和s3所引用的字符串在编译期间就已经确定下来,因此它们都将引用常量池中的同一个字符串对象,s6对应的字符串值不能在编译期间确定下来,s7使用新构造器将会创建一个新字符串的对象,s7引用堆内存中创建的字符串对象,不在常量池中。(关于字符串字符串的创建和存储机制将在下篇介绍,望大家置顶公众号,第一时间收看)。

<强> 2。equals()方法

=()方法是对象类提供的一个方法,直接使用这个方法判断两个对象相等的标准与使用==运算符没有区别,但是怎么样实现类似于“值相等”的判断规则呢?答案是重写=方法。

字符串已经重写了对象的equals()方法,字符串的equals()方法判断两个字符串相等的标准是:如果两个字符串所包含的字符序列相等,通过=()方法比较将返回真,否则返回错误的。

一般而言,重写=()方法应该满足下列条件:

1)自反性:对任意x, x.e quals (x)一定返回真的。
2)对称性:对任意x, y,如果x.e quals (y)返回真,则y.equals (x)也一定返回真的。
3)传递性:对任意x, y, z,如果x.e quals (y)返回真,y.equals (z)也返回真,则x.e quals (z)也一定返回真的。
4)一致性:对任意x, y,如果对象中用于比较的信息没有改变,那么无论调用多少次x.e quals (y),返回的结果应该保持一致,要么一直返回真,要么一直返回假。
5)对任意不是空的x, x.e quals (null)一定返回假。

实际应用中常常需要根据业务本身重写=()方法,等于()方法的实现也是由业务决定的,下面示范了一种符合实际情况的重写=()方法的示例:

public  class  Person  {   ,private  String 名称;//姓名   ,private  int 年龄;//年龄   ,private  String  idNum;//身份证号   ,   ,public 人(),{   超级才能();   ,}   ,   ,public 人(姓名、String  int 年龄,String  idNum), {   超级才能();   this.name 才能=,名称;   时间=this.age 才能;年龄;   时间=this.idNum 才能;idNum;   ,}      ,//重写=方法   ,public  boolean =(Object  obj) {//才能如果两个对象是同一个对象,返回现实   如果才能(却;能够==,obj) {   ,,return 真实;   ,,}//obj才能是人对象   如果才能(obj !=null ,,, obj.getClass ()==Person.class) {   ,,Person  p =,(人)obj;   ,,//并且身份证号相同才判断两个对象相等   ,,如果(this.idNum.equals (p.getIdNum ())) {   ,,,return 真实;   ,,}   ,,}   return 才能;假;   ,}      ,public  String  getName (), {   return 才能,名字;   ,}      ,public  void  setName (String 名称),{   this.name 才能=,名称;   ,}      ,public  int  getAge (), {   return 才能;年龄;   ,}      ,public  void  setAge (int 年龄),{   时间=this.age 才能;年龄;   ,}      ,public  String  getIdNum (), {   return 才能;idNum;   ,}      ,public  void  setIdNum (String  idNum), {   时间=this.idNum 才能;idNum;   ,}      ,public  static  void  main (String [], args), {   Person 才能;p1 =, new 人(“张三,,,14日,“zs14abc");   Person 才能;p2 =, new 人(“张三2“,,15日,“zs14abc");   Person 才能;p3 =, new 人(“张三,,,14日,“zs14abc2");   System.out.println才能(“p1.equals (p2) ?:,“+ (p1.equals (p2)));   System.out.println才能(“p1.equals (p3) ?:,“+ (p1.equals (p3)));   ,}      }

java==运算符和equals()方法的区别有哪些