0
点赞
收藏
分享

微信扫一扫

【二】【设计模式】建造者模式

晗韩不普通 03-31 19:30 阅读 1

一、"=="

1. 自动转型到精度更高的类型后进行比较

int it = 65;
float fl = 65.0f;
System.out.println(“65 和 65.0f 是否相等?” + (it == fl));//true

2. char的本质是字符对应的ASCII码值

char ch1 = ‘A’; char ch2 = 12;
System.out.println(“65 和‘A’是否相等?” + (it == ch1));//T
System.out.println(“12 和 ch2 是否相等?” + (12 == ch2));//T

 3. 地址不同,内容相同

String str1 = new String("hello");
String str2 = new String("hello");
System.out.println("str1 和 str2 是否相等?"+ (str1 == str2)); //F
System.out.println(“str1 是否 equals str2?”+(str1.equals(str2)));//T

二、equals() 

Object的equals()源码:

        equals()方法底层依赖的是"==",所以在没有重写equals()方法的子类中,调用equals()方法其实和使用"=="的效果一样,即比较的是地址值(是否为同一个对象)。
        实际应用中,子类通常会对equals方法进行重写,用来比较指向的对象所存储的内容是否相等。
public boolean equals(Object obj) {
    return (this == obj);
}

String的equals():

public boolean equals(Object anObject) {
    if (this == anObject) {//如果是同一个对象
        return true;//返回 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;//如果两个字符串的所有字符都相等,则返回 true
        }
    }
    return false;//如果比较的不是字符串,则直接返回 false
}

 Integer包装类的equals():

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
    return value == ((Integer)obj).intValue();
    }
    return false;
}

如何重写 equals 方法

要求:判断两个 Person 对象的内容是否相等,如果两个 Person 对象的各个属性值都一样(name、age、gender),则返回 true,反之 false。
public boolean equals(Object obj) {
    //判断如果比较的两个对象是同一个对象,则直接返回 true
    if(this == obj) {
        return true;
    }

    //类型判断
    if(obj instanceof Person) {//是 Person,我们才比较
        //进行 向下转型, 因为我需要得到 obj 的各个属性
        Person p = (Person)obj;
        return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
    }
    
    return false; //如果不是 Person ,则直接返回 false
}

参考:韩顺平java教程

举报

相关推荐

0 条评论