讨论/技术交流/String equals 方法的精妙之处在哪里?/
String equals 方法的精妙之处在哪里?

以下是equals方法的源码,我不太明白while那块那样写的好处是什么? 直接for(int i=0;....)这样写不好吗?

 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;
    }
1
共 2 个回复

或者是因为for每次都计算长度,效率变差吧

2

(leecode有点垃圾啊,上传的图片几十秒就失效)
从字节码的角度来说的话可以少一条指令
与零比较(i != 0)只需要加载一个值
iload_2 // 加载i
ifeq

与非零值比较(i<n)需要加载两个值
iload_2 //加载i
iload_1 //加载n
if_icmpge