【Java源码解读】String中的equals方法

//简单来说,就是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。
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;
    }

equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

下面解读一下这个:

 while (n--!= 0) {
 if (v1[i] != v2[i])
 return false;
 i++; 
 }

这段代码是用于判断字符串是否相等,但有个奇怪地方是用了 n-- != 0 来做判断,我们通常不是用 n++ 么?为什么用 n-- 呢?而且循环次数相同。

原因在于编译后会多一条指令:(下面将n--说成i--,方便理解!)

i-- 操作本身会影响 CPSR(当前程序状态寄存器),CPSR 常见的标志有 N(结果为负), Z(结果为 0),C(有进位),O(有溢出)。 i > 0 ,可以直接通过 Z 标志判断出来。
i++ 操作也会影响 CPSR(当前程序状态寄存器),但只影响 O(有溢出)标志,这对于 i < n  的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。

简单来说,跟 0 比较会少一条指令。所以,循环使用 n-- ,高端大气上档次

### 回答1: Java 中的 `String` 类的 `equals()` 方法用于比较两个字符串是否相等。该方法比较的是字符串的内容,而不是对象的引用。如果两个字符串的内容完全相同,则该方法返回 `true`,否则返回 `false`。 ### 回答2: Java中的字符串(String)类型具有equals()方法,该方法用于比较两个字符串是否相等。当equals()方法被调用时,它会比较两个字符串的内容是否相同,如果相同则返回值为true,否则返回值为false。这个方法是带参数的,即它接收数据类型为String的一个参数,这个参数是用来表示需要对比的字符串。 与“==”进行比较不同,equals()方法可以判断字符串的内容是否相等,而“==”比较的是两个对象的引用是否指向同一个地址。因此,使用equals()能够确保两个字符串在内容上是相同的,而“==”则不一定能够达到这样的效果。 在使用equals()方法时,需要注意空指针异常的问题。如果一个字符串变量的值为null,调用它的equals()方法,则会抛出空指针异常。因此,在使用equals()方法时,应该首先判断字符串是否为null,然后再进行比较操作。常见的做法是使用字符串常量调用equals()方法,因为字符串常量是不会为null的,不会引起空指针异常。 Java中的字符串比较还有另一种方式,即compareTo()方法。compareTo()方法用于比较两个字符串的字典顺序,如果两个字符串相等,则返回值为0,如果该字符串在字典顺序上小于参数字符串,则返回负数,反之则返回正数。这个方法同样也是带参数的,即它接收数据类型为String的一个参数。 总之,equals()方法可以用来比较两个字符串的内容是否相等,而compareTo()方法则可以用来比较两个字符串的字典顺序。这两种方法Java中都非常常用,在实际的编程中要注意它们的不同点和使用方法。 ### 回答3: Java中的String类是一个非常重要的类,被广泛地使用。在String类中还有一个很重要的方法,那就是equals方法,本文将围绕着JavaStringequals方法进行详细的讲解。 首先,equals方法是用来比较两个字符串是否相等的。这个方法的返回值是boolean类型的,当两个字符串相等时返回true,否则返回false。在Java中,equals方法是Object类中定义的方法String类只是将这个方法覆盖掉了,因此String中的equals方法和Object类中的equals方法用法一样,都是比较两个对象是否相等。 在Java中,字符串使用双引号表示,这个双引号是Java字符串的标识符,我们可以使用它来创建字符串。如下所示: ``` String str1 = "Hello"; String str2 = new String("Hello"); ``` 在Java中,使用equals方法比较两个字符串是否相等时,比较的是字符串的内容,而不是比较字符串的引用地址。也就是说,如果两个字符串的内容相等,那么equals方法返回true,否则返回false。在上面的例子中,str1和str2的内容都是"Hello",因此它们相等,equals方法返回true。 在Java中,字符串是不可变的,也就是说,如果一个字符串被创建出来后,它的内容是不会改变的。因此,字符串的比较可以通过比较字符串的内容实现。 Java中的equals方法是一个重要的方法,掌握这个方法的用法对于Java程序员来说非常重要。在使用equals方法时,需要注意以下几点: 1.比较的是字符串的内容,而不是比较字符串的引用地址。 2.当比较两个字符串是否相等时,必须要确保它们都不是null,否则会出现NullPointerException。 3.使用equals方法比较字符串时,要注意字符串的大小写,因为Java中区分大小写。 4.在比较字符串时,需要使用equals方法比较,不建议使用==运算符来比较。 总之,Java中的equals方法是一个非常重要的方法,它可以用来比较两个字符串是否相等,掌握这个方法的使用方式对于Java程序员来说非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值