equals

本文详细解析了Java中String类的equals方法实现原理。通过源码分析,解释了字符串对象如何通过比较字符数组来判断两个字符串是否相等,并强调了与==操作符的区别。
public boolean equals(Object anObject) {
//比较是不是同一个对象,这里是==比较,比较的是地址,地址相同则是相同
//this这里指代的是当前调用对象,就是谁调用的equals方法,这里的this指的就是谁
    if (this == anObject) {
        return true;
    }
//instanceof判断anObject是不是String的子类
    if (anObject instanceof String) {
//此处转为String类型,便于下面把每个字符取出来进行比较
        String anotherString = (String) anObject;
//value是String类自身的属性,length没有翻到到底是哪里定义的属性,反正n就是指代一个int类型的对象(你调用equals方法的那个对象)的长度
        int n = value.length;
//判断长度是否相同,不相同肯定肯定是false了
        if (n == anotherString.value.length) {
//自身属性的引用,String类本身定义的
            char v1[] = value;
//相当于String转数组
            char v2[] = anotherString.value;
            int i = 0;
//遍历拿出每一个字符进行比较,每个字符按顺序取出,都相同则true
            while (n-- != 0) {
                if (v1[i] != v2[i])
                        return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
### `equals` 方法的使用方式 在 Java 中,`equals` 方法主要用于比较两个对象的内容是否相等。对于 `String` 类,`equals` 方法比较的是字符串的实际内容,而不是引用地址。以下是一个简单的示例: ```java public class EqualsExample { public static void main(String[] args) { String str1 = "Hello"; String str2 = new String("Hello"); // 使用 equals 方法比较内容 boolean isEqual = str1.equals(str2); System.out.println("str1 和 str2 的内容是否相等: " + isEqual); // 使用 == 比较引用地址 boolean isSameReference = str1 == str2; System.out.println("str1 和 str2 是否引用同一对象: " + isSameReference); } } ``` 在上述代码中,`str1` 和 `str2` 的内容相同,但引用地址不同。使用 `equals` 方法比较时返回 `true`,而使用 `==` 比较时返回 `false`。这表明在实际的 Java 编程中,如果目的是比较两个字符串的内容是否相等,应该使用 `equals` 方法,而不是 `==` 运算符,因为 `equals` 方法比较的是字符串的实际内容,能够满足大多数场景下的比较需求[^1]。 ### 与字符串拼接对象打印的关联 在字符串拼接对象打印的场景中,`equals` 方法可以用于验证拼接结果是否符合预期。例如,在拼接对象的 `toString` 方法返回的字符串时,可以使用 `equals` 方法来检查拼接后的字符串是否与预期的字符串一致。以下是一个示例: ```java class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } public class StringConcatenationWithEquals { public static void main(String[] args) { Person person = new Person("Alice", 25); String expected = "This is a person: Person{name='Alice', age=25}"; String result = "This is a person: " + person; boolean isExpectedResult = result.equals(expected); System.out.println("拼接结果是否符合预期: " + isExpectedResult); } } ``` 在这个示例中,通过 `equals` 方法比较拼接后的字符串 `result` 和预期的字符串 `expected`,从而验证拼接结果是否正确。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值