Java字符串null相加

编程入门 行业动态 更新时间:2024-10-23 15:26:16

Java<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串null相加"/>

Java字符串null相加

Java字符串null相加

 

       最近和同事讨论了下面的一段代码:

String a = null;
a += a;
System.out.println(a);

        运行结果:

nullnull

       本着学习的态度研究了一下这段代码,在本地将上面代码编写之后使用javap反编译Java字节码文件得到下面字节命令:

    Code:0: aconst_null1: astore_12: new           #16                 // class java/lang/StringBuilder5: dup6: aload_17: invokestatic  #18                 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;10: invokespecial #24                 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V13: aload_114: invokevirtual #27                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;17: invokevirtual #31                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;20: astore_121: getstatic     #35                 // Field java/lang/System.out:Ljava/io/PrintStream;24: aload_125: invokevirtual #41                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V28: return

       原来编译器对字符串相加会进行优化,首先创建一个StringBuilder对象,然后把相加的字符串按顺序append,最后调用toString方法返回一个String对象。

 

       还是看一下源码StringBuilder的append方法是如何处理null的吧。

public StringBuilder append(String str) {super.append(str);return this;
}

 

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

       append方法会判断传入对象如果为null,就会调用appendNull方法,appendNull方法填充了一个char[]数组,其内容为"null"。

 

 

更多推荐

Java字符串null相加

本文发布于:2024-02-06 06:52:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746965.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   Java   null

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!