丑肥

导航

2.== 与 equals 区别

 

  使用= =时

  • 比较基本数据类型:= = 比较值;
  • 比较引用数据类型:= = 比较内存地址;
  • 使用包装类,如new Integer()  ==  基本数据类型,如int 。结果为拆箱后比较值;
  • 使用new Integer() ==与 final Integer 常量相比较时看取值范围 ,范围为常量池大小,如 Integer常量范围在-128~127之间,在此期间比较值,不在此期间比较地址,不建议直接比较,且浮点数类型的包装类无常量池;

 

  使用equals()

  • object基类中定义了equals(), 默认==比较

 

public boolean equals(Object obj) {
        return (this == obj);
    }
  • 包装类重写了equals(),如Integer 会做拆箱操作,比较值
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

 

  • java.lang.String.equals()重写后,先比较内存地址,内存地址不相同时比较值
public boolean equals(Object anObject) {
    //比较地址
if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length;
//判断长度,char对比
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; }

 

 

 

posted on 2019-11-26 17:04  丑肥  阅读(182)  评论(0编辑  收藏  举报