Bootstrap

== 与 equals 区别

== 与 equals 区别

Java 分为基本数据类型和引用数据类,基本数据类型的值存在栈中,引用数据类型的值存在堆中, == 号比较的是栈的地址,equals方法也是继承object,String重写了equals方法,Object中equals是跟== 一样的比较的都是栈的地址,经过String类改写后equals将堆对象的内容取出逐一比较。这就是==与equals的区别。
Object中equals方法

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

String中equals方法

public boolean equals(Object paramObject) {
  if (this == paramObject) {
    return true;
  }
  if (paramObject instanceof String) {
    String str = (String)paramObject;
    int i = this.value.length;
    if (i == str.value.length) {
      char[] arrayOfChar1 = this.value;
      char[] arrayOfChar2 = str.value;
      byte b = 0;
      while (i-- != 0) {
        if (arrayOfChar1[b] != arrayOfChar2[b])
          return false; 
        b++;
      } 
      return true;
    } 
  } 
  return false;
}

习题

		String a = "123";
		String b = new String("123");
		String c= b;
		System.out.println(a == b);//false
		System.out.println(a == c);//false
		System.out.println(b == c);//true;
		System.out.println(a.equals(b));//true
		System.out.println(a.equals(c));//true
		System.out.println(b.equals(c));//true;
;