java中equal和==的区别

来源:互联网 发布:2017淘宝查的太严了吧 编辑:程序博客网 时间:2024/06/15 18:46
1.值类型和引用类型

值类型:没有equals方法,只有==;

引用类型:使用equals和==两种形式比较;

==操作比较的是两个变量的值是否相等,即是否指向堆内存中的同一对象;equals比较两个变量实际指向的堆中的内容是否相同。

例1:以String类为例,s1,s3指向堆中同一段地址,s2指向堆中另一段地址,但存储的内容和s1,s3相同;

public class EqualTest {public static void main(String[] args){String s1="lpq";String s2=new String("lpq");System.out.println(s1.equals(s2));System.out.println(s1==s2);String s3="lpq";System.out.println(s1.equals(s3));System.out.println(s1==s3);}}输出:truefalsetruetrue

2.自定义的类
如果是你自己定义的一个类没有覆写euqals方法,那么用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的
equals就是用==来实现的。若要重新定义两个对象的比较,需要重写equals()方法
例2:使用默认的equals方法,比较两个内容相同的对象

public class EqualTest {public static void main(String[] args){A a=new A("first");A b=new A("first");System.out.println(a.equals(b));System.out.println(a==b);}}class A{public String s;public A(){}public A(String s){this.s=s;}}输出:falsefalse
例3:覆写equals方法,比较两个内容相同的对象
public class EqualTest {public static void main(String[] args){A a=new A("first");A b=new A("first");System.out.println(a.equals(b));System.out.println(a==b);}}class A{public String s;public A(){}public A(String s){this.s=s;}public boolean equals(A a){if(this.s.equals(a.s))return true;elsereturn false;}}输出:truefalse


2 0