Java中 == 和equals区别

== :等于    比较地址

  1. 如果进行比较的两个操作数都是数值类型,即使他们的数据类型不同,只要他们的值相等,也会返回true。如97=='a' 返回true

  2. 如果两个操作数都是引用类型,那么只有两个引用变量引用相同类的实例时才可以比较,而且这两个引用必须指向同一个对象才会返回true。

Eg:

public class Test {
    public static void main(String[] args) {
        System.out.println('a'==97);
        System.out.println(5==5.0);
        String str1=new String("hello");
        String str2=new String("hello");
        System.out.println(str1==str2);
        str1=str2;
        System.out.println(str1==str2);
    }
}

运行结果:

因为指向不同对象会出现false不相等情况

把str2指向的对象赋值给str1,现在指向统一对象,所以为true

 

equals(): 

  默认比较内存地址(一般会重写equals()方法),比较值

  当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.

  String类型中,equals()比较的是两字符串内容是否相同

  对象,比较的是对象地址

  

Eg:    String类型中,equals()比较的是两字符串内容是否相同

    public static void Demo2(){
        String str1=new String("hello");
        String str2=new String("hello");
        String str3=new String("world");
        String s1="hello";
        String s2="hello";
        System.out.println(str1.equals(str2));
        System.out.println(str1.equals(str3));
        System.out.println(s1.equals(str2));
        System.out.println(str1==str2);
        System.out.println(str1==str3);
        System.out.println(s1.equals(s2));
    }

超类Object中equals方法:

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

运行结果:

Eg2:    比较的是对象地址

  public static void main(String[] args) {
        A a=new A();
        a.a=6;
        A b=new A();
        b.a=6;
        System.out.println("a的地址值"+System.identityHashCode(a));
        System.out.println("b的地址值"+System.identityHashCode(b));
        System.out.println(a.equals(b));
        a=b;
        System.out.println("a的地址值"+System.identityHashCode(a));
        System.out.println("b的地址值"+System.identityHashCode(b));
        System.out.println(a.equals(b));
    }

运行结果:

 

posted @ 2019-05-28 10:50  Cool_Yang  阅读(420)  评论(0编辑  收藏  举报