在java中字符串对“+“的用法

  介绍

小编给大家分享一下在java中字符串对“+”的用法,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

下面有段简单的代码

公共类StringPlusTest {
  公共静态void main (String [] args) {
  字符串s1=癮aa";
  字符串s2=癰bb";
  字符串s=癱cc"+ s1 + s2 +“ddd";
  }}

使用<代码> \ StringPlusTest javap - c。类>

编制从“StringPlusTest.java" com.epoint.codetuning.test公共类。StringPlusTest {
  公共com.epoint.codetuning.test.StringPlusTest ();
  代码:
  0:aload_0 1: invokespecial # 1//java/lang/对象方法!”& lt; init>“: V ()
  4:返回
  
  公共静态void main(以[]);
  代码:
  0:ldc # 2//字符串aaa
  2:astore_1 3: bbb ldc # 3//字符串
  5:astore_2 6:新# 4//java/lang/StringBuilder类
  9:dup 10: invokespecial # 5/java/lang/方法/StringBuilder !”& lt; init>“: V ()
  13:ldc # 6//字符串ccc
  15:invokevirtual # 7//java/lang/StringBuilder.append:方法(Ljava/lang/String;) Ljava/lang/StringBuilder;
  18:aload_1 19: invokevirtual # 7//java/lang/StringBuilder.append:方法(Ljava/lang/String;) Ljava/lang/StringBuilder;
  22:aload_2 23: invokevirtual # 7//java/lang/StringBuilder.append:方法(Ljava/lang/String;) Ljava/lang/StringBuilder;
  26日:ldc # 8//ddd字符串
  28:invokevirtual # 7//java/lang/StringBuilder.append:方法(Ljava/lang/String;) Ljava/lang/StringBuilder;
  31日:invokevirtual # 9//java/lang/StringBuilder.toString方法:()Ljava/lang/String;
  34:astore_3 35:返回}

其中,

 ldc把常量池中的项压入栈
  astore_1将引用类型或returnAddress类型值存入局部变量1
  astore_2将引用类型或returnAddress类型值存入局部变量2
  新的创建一个新对象
  dup复制栈顶部一个字长内容
  invokespecial根据编译时类型来调用实例方法
  aload_1从局部变量1中装载引用类型值
  aload_2从局部变量2中装载引用类型值
  astore_3将引用类型或returnAddress类型值存入局部变量3 

对于Java来说,这段代码原理上应该是:

公共类StringPlusTest {
  公共静态void main (String [] args) {
  字符串s1=癮aa";
  字符串s2=癰bb";
  字符串s=新StringBuilder () .append (“ccc") .append (s1) .append (s2) .append (“ddd") .toString ();
  }}

由此可见,Java中使用“+”拼接字符串的实现原理是通过建立临时StringBuilder对象调用附加和toString方法实现。

对上面代码做一些修改

公共类StringPlusTest {
  公共静态void main (String [] args) {
  字符串s1=癮aa";
  字符串s2=零;
  字符串s=癱cc"+ s1 + s2 +“ddd";
  System.out.println(年代);
  }}

结果是什么?

运行可以得到如下:

 cccaaanullddd 

查看StringBuilder源码

@Overridepublic StringBuilder append (String str) {   super.append (str);   返回;}

该方法调用继承父类AbstractStringBuilder的方法,再去父类中查看

在java中字符串对“+“的用法