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;
        }

    /**省略其他的代码**/
    }
  • 相关阅读:
    DokuWiki 插件使用
    DokuWiki 命名空间管理
    Ubuntu 14.10 下DokuWiki安装
    Ubuntu 14.10 下安装Ambari
    Ubuntu 14.10 下安装Ambari 问题汇总
    Hadoop 权限管理
    Spark 性能调优-内存设置-GC设置
    Ubuntu 14.10 下NodeJS Cannot find module 'npmlog'
    Hadoop 新增删除节点
    Ubuntu 14.10 下开机不进入图形化界面
  • 原文地址:https://www.cnblogs.com/wwzyy/p/5504938.html
Copyright © 2011-2022 走看看