zoukankan      html  css  js  c++  java
  • 比较compareTo与equals及==的区别

    1.compareTo:

    附上:源码:

     public int compareTo(String anotherString) {
            int len1 = value.length;
            int len2 = anotherString.value.length;
            int lim = Math.min(len1, len2);
            char v1[] = value;
            char v2[] = anotherString.value;


            int k = 0;
            while (k < lim) {
                char c1 = v1[k];
                char c2 = v2[k];
                if (c1 != c2) {
                    return c1 - c2;
                }
                k++;
            }
            return len1 - len2;
        }

    从源码中可以看出了:

    compareTo的主要是比较两个String对象间的字符的Unicode值并作差(若是子集包含的关系则是比较长度差值)

    2.equals:

    附上(String类中)源码:

        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是被重写了:变为了比较字符的内容(object中的equals作用与==一样,有兴趣的可以自己去看object中equals的源码)

    3.==

    这个就是直接比较对象的引用地址:

    若一样则返回true

    反之false

    最后国际惯例附上练习代码君:

    package com.jacob.javase;
    /*
     * 比较compareTo与equals及==的区别
     */
    public class EqualsAndCompAreTo {
    public static void main(String[] args) {
    // 1.compareTo()
    //  String中:比较的是Unicode值
    String ct = "xieji";
    String ct1 = "xieji";
    String ct2 = "xadfi";
    String ct3 = "xasdfds";
    String ct4 = "xieji123";
    // ct.compareTo(ct4);
    System.out.println("ctComct1=" + ct.compareTo(ct1) + " " + "ctComct2="
    + ct.compareTo(ct2) + " " + "ctComct3=" + ct3.compareTo(ct)
    + " " + "ctComct4=" + ct.compareTo(ct4));
    // 2. equals与==:一个比较内容,一个比较地址@
    String a = "test";
    String a1 = "test";
    String a2 = new String("test");
    Boolean d = a.equals(a1);
    Boolean d1 = a.equals(a2);
    boolean e = a == a1;
    boolean f = a == a2;
    System.out.println(d + " " + e + " " + f + " " + d1);

    }
    }

  • 相关阅读:
    日志模块
    模块介绍3
    模块介绍2
    模块介绍
    迭代器
    Python装饰器续/三元表达式/匿名函数
    Python装饰器详解
    LATEX LIAN XI
    BELLMAN 最短路算法
    B阿狸和桃子的游戏
  • 原文地址:https://www.cnblogs.com/xieji233/p/6155663.html
Copyright © 2011-2022 走看看