字符串拼接的坑null与nullnull

很多人习惯,习惯将基本类型或基本类型的包装器类通过以下形式进行隐性转换,例如,

int f = 1;
        String ff = f+"";

但是当要印象转换是个对象,那么结果会是怎么样呢?

 		 String a = null;
        String b = null;
        String c = a +"";
        String d = a+b;
        System.out.println(c);
        System.out.println(d);

结果居然是

null
nullnull

S
下面解答疑惑,因为jvm虚拟机为了提升字符串拼接性能,将 “+”,编译处理为StringBuilder.append方法 ,而append方法就将null拼接成"null"字符串,这也就是为什么出现以上结果的原因

 public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }
    
    private AbstractStringBuilder appendNull() {
        int c = count;
        ensureCapacityInternal(c + 4);
        final char[] value = this.value;
        value[c++] = 'n';
        value[c++] = 'u';
        value[c++] = 'l';
        value[c++] = 'l';
        count = c;
        return this;
    }
发布了235 篇原创文章 · 获赞 221 · 访问量 96万+

猜你喜欢

转载自blog.csdn.net/drdongshiye/article/details/99657595