==和equals区别

使用==比较

  • 基本类型:比较是否相等;
  • 引用类型:比较内存地址值是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false

使用equals比较

引用类型:

  • 默认情况下,比较内存地址值是否相等
    • equals方法是Object类的一个方法,Java当中所有的类都是继承于Object这个超类:
      public class Object {
        public boolean equals(Object obj) {
          return (this == obj);
        }
      }
      
  • 可以按照需求逻辑,重写对象的equals方法比较不同String类型对象内容是否相同,应该用equals()
    在实际使用中,一般会重写equals方法,如java.lang.String类的equals源码如下:
    private final char value[];
    
    public final class String {
      public boolean equals(Object anObject) {
          if (this == anObject) {
              return true;
          }
          if (anObject instanceof String) {
              String anotherString = (String) anObject;
              int n = value.length;
              if (n == anotherString.value.length) {
                  char v1[] = value;
                  char v2[] = anotherString.value;
                  int i = 0;
                  while (n-- != 0) {
                      if (v1[i] != v2[i])
                          return false;
                      i++;
                  }
                  return true;
              }
          }
          return false;
      }
    }
    
    • 首先会判断要比较的两个字符串它们的引用是否相等。如果引用相等的话,直接返回true,不相等的话继续下面的判断;
    • 然后再判断被比较的对象是否是String的实例,如果不是的话直接返回false;
    • 如果是的话,再比较两个字符串的长度是否相等,如果长度不相等的话也就没有比较的必要了;
    • 长度如果相同,会比较字符串中的每个字符是否相等,一旦有一个字符不相等,就会直接返回false。

参考资料

1.==和equals的区别

posted @ 2021-03-11 01:05  chenzufeng  阅读(162)  评论(0编辑  收藏  举报