字符串追加没有双引号

时间:2014-09-03 05:35:18

标签: java string append operator-keyword double-quotes

我是java的初学者。我对String上的+=操作有疑问。为什么我可以使用+=运算符来追加没有双引号的String对象?

例如,我在这段代码上没有编译错误

String s1 = "abc";
String s1+=42;

当我真的以为我必须使用s1+="42";

3 个答案:

答案 0 :(得分:2)

 String s1+=def;

该行有效,然后def是另一个Java String。由于它是成功编译的,所以在代码之前的某些地方,你有

 String def ="someDeclaredStringBefore";

**Update:**

为了清楚发生什么事情,首先让我们看看+如何在字符串上运行。

它使用StringBuilder追加方法。对于前

 StringBuilder compilerGeneratedBuilder = new StringBuilder();  
 compilerGeneratedBuilder.append("str");  
 compilerGeneratedBuilder.append("ingcon");  
 compilerGeneratedBuilder.append("catenation");  
 String finalString = compilerGeneratedBuilder.toString();

我最近在这里写的全文:

http://codeinventions.blogspot.com/2014/08/compiler-version-string-concatenation.html

撰写String r += 42;

因为您尝试添加int值。 StringBuilder上的相应append(int i)方法调用和最终字符串生成。

答案 1 :(得分:2)

使用此代码模拟您的上述问题:

    String s = "asd";
    s+=42;
    System.out.println(s);

将导致此byteCote:

 Code:
      0: ldc           #16                 // String asd
      2: astore_1
      3: new           #18                 // class java/lang/StringBuilder
      6: dup
      7: aload_1
      8: invokestatic  #20                 // Method java/lang/String.valueOf:(
java/lang/Object;)Ljava/lang/String;
     11: invokespecial #26                 // Method java/lang/StringBuilder."<
nit>":(Ljava/lang/String;)V
     14: bipush        42
     16: invokevirtual #29                 // Method java/lang/StringBuilder.ap
end:(I)Ljava/lang/StringBuilder;
     19: invokevirtual #33                 // Method java/lang/StringBuilder.to
tring:()Ljava/lang/String;
     22: astore_1
     23: getstatic     #37                 // Field java/lang/System.out:Ljava/
o/PrintStream;
     26: aload_1
     27: invokevirtual #43                 // Method java/io/PrintStream.printl
:(Ljava/lang/String;)V
     30: return

查看数字16和19 ,您可以清楚地看到它调用StringBuilder类并在append method内部调用附加42 += operator的{​​{1}}然后它将它转换为String。

编辑:

上面的代码实际上是这样说的:line 19,所以每次使用plus运算符到String的整数时,它都会调用它的包装类并调用toString方法

JLS

s = s + 42

答案 2 :(得分:1)

String s1 = "abc";
String s1+=42;

这很有效,因为42是int

加号+是Java中的重载运算符。它可以添加数字或附加字符串。

  1. 如果您对这两个号码都使用+,则会添加它。

    System.out.println(1+1); //2

  2. 如果您在两个字符串上使用它,它将附加字符串。

    System.out.println("abc"+"def"); //abcdef

  3. 如果您在数字和字符串的组合中使用它,它只会将它附加在一起。

    System.out.println(1+"1"); //11

  4. 有关详细信息check out this article on Oracle