zoukankan      html  css  js  c++  java
  • String类的equals是如何进行字符串比较的

    先看一段代码:

    public static void main(String[] args) {
            
            String a = new String("abc");
            String b = new String("abc");
    
            System.out.println(a==b);//结果为false
            System.out.println(a.equals(b));//结果为true
    }

    ==和equals的区别是什么呢?

    简单的说,“==”用于判断引用是否相等,equals()用于判断值是否相等

    a和b都是通过new得到的一个对象,是两个不同的对象,所以其内存地址也是不同的;所以 a==b 返回的结果是false

    看一下equals,代码:

    public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {

    private final char value[];

    private int hash; // Default to 0

      public String(String original) {//我们通过new String("abc");把值放入value[]
        this.value = original.value;
        this.hash = original.hash;
      }

    /**省略其他的代码**/

     public boolean equals(Object anObject) {
            if (this == anObject) {//如果两个值的引用相同,直接返回true
                return true;
            }
            if (anObject instanceof String) {//如果是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;
        }

    /**省略其他的代码**/
    }
  • 相关阅读:
    第三题 bfw在睡觉
    第二题 bfw和zhk的故事
    第一题 奶牛散步
    AC加油站7月比赛总结
    暑期机房联赛
    题解 P5663 【加工零件【民间数据】】
    题解 P1052 【过河】
    并发编程之进程
    网络编程socketserver
    网络编程之黏包
  • 原文地址:https://www.cnblogs.com/wwzyy/p/5504938.html
Copyright © 2011-2022 走看看