Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java运算符“+;”和'StringBuilder.append'`_Java_Decompiler - Fatal编程技术网

java运算符“+;”和'StringBuilder.append'`

java运算符“+;”和'StringBuilder.append'`,java,decompiler,Java,Decompiler,据说,当我使用+操作符concatString时,它随后会转换为StringBuilder.append,但当我运行Java反编译器GUI并打开MainClass.class时,出现了 public class MainClass { public static void main(String[] paramArrayOfString) { String str1 = "abc"; String str2 = "def"; String str3 = str1

据说,当我使用
+
操作符concat
String
时,它随后会转换为
StringBuilder.append
,但当我运行Java反编译器GUI并打开
MainClass.class
时,出现了

public class MainClass
{
  public static void main(String[] paramArrayOfString)
  {
    String str1 = "abc";
    String str2 = "def";

    String str3 = str1 + str2;
  }
}
原著是什么时候出版的

public class MainClass {

    public static void main(String[] args) {

        String val1 = "abc";
        String val2 = "def";

        String res = val1 + val2;

    }
}
怎么了?
我使用
javac MainClass编译了它。java

大多数反编译器将自动将编译器生成的
StringBuilder
序列转换回字符串连接

为数不多的一个是。如果你用Krakatau反编译这个类,你会得到

public class MainClass {
    public MainClass()
    {
        super();
    }

    public static void main(String[] a)
    {
        new StringBuilder().append("abc").append("def").toString();
    }
}
如您所见,
StringBuilder
代码就在那里。您还可以查看拆解以确定

.version 51 0
.source MainClass.java
.class super public MainClass
.super java/lang/Object


.method public <init> : ()V
    ; method code size: 5 bytes
    .limit stack 1
    .limit locals 1
    aload_0
    invokespecial java/lang/Object <init> ()V
    return
.end method

.method static public main : ([Ljava/lang/String;)V
    ; method code size: 26 bytes
    .limit stack 2
    .limit locals 4
    ldc 'abc'
    astore_1
    ldc 'def'
    astore_2
    new java/lang/StringBuilder
    dup
    invokespecial java/lang/StringBuilder <init> ()V
    aload_1
    invokevirtual java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder;
    aload_2
    invokevirtual java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder;
    invokevirtual java/lang/StringBuilder toString ()Ljava/lang/String;
    astore_3
    return
.end method
.version 51 0
.source MainClass.java
.class超级公共main类
.super java/lang/Object
.public方法:()V
; 方法代码大小:5字节
.限制堆栈1
.限制本地人1
阿洛德0
调用特殊的java/lang/Object()V
返回
.结束方法
.method static public main:([Ljava/lang/String;)V
;方法代码大小:26字节
.限制堆栈2
.限制本地人4
最不发达国家“abc”
astore_1
最不发达国家“def”
阿斯托雷2
新java/lang/StringBuilder
重复
调用特殊的java/lang/StringBuilder()V
阿洛德1
invokeVirtualJava/lang/StringBuilder追加(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload_2
invokeVirtualJava/lang/StringBuilder追加(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokeVirtualJava/lang/StringBuilder toString()Ljava/lang/String;
astore_3
返回
.结束方法

Use
javap-v MainClass
您将知道正在使用
StringBuilder
。此外,反编译器反编译代码并尝试给出原始源代码(编译器的反向操作)。你需要检查
文件。我知道了。有一行是
stringbuilder.append
。但是为什么java反编译器没有显示在
。类
文件的那一行?我想应该在
。类
文件中更改。请查看反编译器是什么。我明白了。有工具可以让我查看
编译的
>但是不是
反编译的
code?我的意思是在哪里可以看到
stringbuilder.append
。或者这是不可能的?就像我说的,使用
javap-v ClassName
。然后检查