当前位置:   article > 正文

字符串拼接的坑null与nullnull_stringbuiler.append 不拼接null

stringbuiler.append 不拼接null

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

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

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

 		 String a = null;
        String b = null;
        String c = a +"";
        String d = a+b;
        System.out.println(c);
        System.out.println(d);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果居然是

null
nullnull
  • 1
  • 2

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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据灵魂/article/detail/61329
推荐阅读
相关标签
  

闽ICP备14008679号