• String常见问题


    1: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中进行了重写,则如果两个字符串的值也就是内存中首地址的值是相同的,则两个对象一定相同。若地址不相同,则会进行类型比较,之后在进行内容比较。

    2:字符串大小问题:

      源码如下:

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

      由此可见:源码中使用字符串首字母根据字典进行排序,若有字符串为空则直接返回

    3:StringBuffer和StringBuilder

      与String的区别,StringBuffer和StringBuilder类的对象修改并不会产生新的对象

      StringBuilder是线程不安全的,但是速度快与StringBuffer,StringBuffer采用synchronized关键字保证线程的安全性

      两个类的方法基本同String方法相同,不过添加时append

  • 相关阅读:
    斯坦福【概率与统计】课程笔记(〇):前言
    斯坦福【概率与统计】课程笔记(二):从EDA开始
    dot
    左移右移
    树莓派系统烧写+网络配置
    windows上面捕获声卡数据
    python1
    继续进销存系统
    base64编码
    DES原理
  • 原文地址:https://www.cnblogs.com/huayuxiaoxiang/p/10097539.html
Copyright © 2020-2023  润新知