总结:

  1. ==是操作符,equals是方法。
  2. 对于基本数据类型(byte,short,int,long,float,double,char,boolean)来说,只能使用==来比较且比较他们的值。
  3. 对于引用类型(String,数组,类,接口)来说,
  1. 若没有重写equals方法,则==与equals作用一样,都是比较他们在内存中的存放地址。euqals底层源码。
public boolean equals(Object obj) {
      return (this == obj);
  }

                2. 像String或重写了equals方法的,当使用 == 比较内存的存放地址不相等时,接下来会                     比较字符串的内容是否相等。下面是String重写equals底层源码。

@Override public boolean equals(Object other) {
  if (other == this) {
    return true;
  }
  if (other instanceof String) {
      String s = (String)other;
      int count = this.count;
      if (s.count != count) {
          return false;
      }
      if (hashCode() != s.hashCode()) {
          return false;
      }
      char[] value1 = value;
      int offset1 = offset;
      char[] value2 = s.value;
      int offset2 = s.offset;
      for (int end = offset1 + count; offset1 < end; ) {
          if (value1[offset1] != value2[offset2]) {
              return false;
          }
          offset1++;
          offset2++;
      }
      return true;
  } else {
      return false;
  }
}