"==" 和 "equals"的区别

2017-06-20  本文已影响0人  压根儿没快乐过

一: new String("hello") 和 String a = "hello" 的区别

public static void method(){
    String a = "hello";
    String b = "hello";
    String c = "h"+"ello";
    String d = new String("hello")

    System.out.prinlnt(a==b);    //true
    System.out.prinlnt(a==c);    //true
    System.out.prinlnt(a==d);    //false
}
  int n=3;
  int m=3;
  System.out.println(n==m);   //true int是基本数据类型,比较它的值,==就是用来比较值是否相等

  String str = new String("hello");
  String str1 = new String("hello");
  String str2 = new String("hello");
  System.out.println(str1==str2); //false 他们比较的引用的地址

  str1 = str;
  str2 = str;
  System.out.println(str1==str2); // 把str堆中的地址复制给str1 和 str2 ,所以他们相等
String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1==str2);        //false
System.out.println(str1.equals(str2)); //true ,原因是String重写了equals方法,比较字符串的内容是不是一样的

二.equals比较

equals方法是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。
这是基类的equals方法的实现

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

在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。

public static void main(String[] args) { 
    String str1 = new String("hello"); 
    String str2 = new String("hello"); 
    System.out.println(str1.equals(str2)); //true

    Person one = new Person("yang",19);
    Person two = new Person("yang",19);
    System.out.println(one.equals(two)); //false
}

为什么下面一段代码的输出结果是true?
String类中equals方法的具体实现


image.png

三.总结

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

转自EakonZhao

上一篇 下一篇

猜你喜欢

热点阅读