判断String对象是否相等(几乎所有情况)

Posted 364.99°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断String对象是否相等(几乎所有情况)相关的知识,希望对你有一定的参考价值。

1.有哪些情况?

额,暂时只想到这些:

        String a = "test";
        
        String b = a;
        
        String c = new String(a);
        
        String d = new String("test");
        
        String e = "te" + "st";
        
        String f = "te".concat("st");
        
        String g = new String("te").concat(new String("st"));
        
        String h = String.valueOf("test");
        
        String i = String.valueOf(c);
        
        char[] strs = new char[]'t','e','s','t';        
        String j = String.copyValueOf(strs);

        String k = a.substring(0,4);

        StringBuilder sb = new StringBuilder("test");
        String l = sb.toString();

来判断:

        boolean B = a==b;
        boolean C = a==c;
        boolean D = a==d;
        boolean E = a==e;
        boolean F = a==f;
        boolean G = a==g;
        boolean H = a==h;
        boolean I = a==i;
        boolean J = a==j;
        boolean K = a==k;
        boolean L = a==l;

        System.out.println("B:" + B + "\\n" + "C:" +  C + "\\n" + "D:" +  D + "\\n" + "E:" +
                E + "\\n" + "F:" + F + "\\n" + "G:" + G + "\\n" + "H:" + H + "\\n" + "I:" +
                I + "\\n" + "J:" + J + "\\n" + "K:" + K + "\\n" + "L:" + L);

查看输出:

2.小结一下

小结一下: 不同的情况有哪些?

  • 明显看到有new新建对象
    因为这个已经创建了新的对象,引用指向了新的对象地址
  • 不能直接看到new,比如copyValueOf(strs)
    其实这个方法的底层还是new了一个新的String对象
    还有concat,底层,还是返回了一个new出来的String对象
    public static String copyValueOf(char data[], int offset, int count) 
        return new String(data, offset, count);
    
    public String concat(String str) 
        if (str.isEmpty()) 
            return this;
        
        int len = value.length;
        int otherLen = str.length();
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    

对了,这里的subString 需要注意一下

    public String substring(int beginIndex, int endIndex) 
        if (beginIndex < 0) 
            throw new StringIndexOutOfBoundsException(beginIndex);
        
        if (endIndex > value.length) 
            throw new StringIndexOutOfBoundsException(endIndex);
        
        int subLen = endIndex - beginIndex;
        if (subLen < 0) 
            throw new StringIndexOutOfBoundsException(subLen);
        
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    

看到最后一句了吗,当切分的两个边界不等于原字符串的左右边界值时,会new一个String对象!

以上是关于判断String对象是否相等(几乎所有情况)的主要内容,如果未能解决你的问题,请参考以下文章

c# 比较两个对象的值是不是相等

Java 判断两个对象是否相等

09 Java相等判断方法

.NET中如何深度判断2个对象相等

字符串问题

java的hashcode用来判断对象是否相等