【发布时间】:2018-10-08 20:47:08
【问题描述】:
我了解基本的 Java 字节码指令以及如何从常量池中引用字段。 但我无法理解这两行之间的差异:
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
具体的区别是什么?
唯一的变化是括号之间的部分指定第一个字符串数组和第二个整数基元。
第一个似乎在开始时只被调用一次,而第二个在每个新条目时都被调用。
编辑:
这是实际关注的源代码。我用它来漂亮地打印一棵树。
System.out.println(String.format("%" + this.indent + "s", "") + "├──── " + nodeToString(currNode));
其中 nodeToString 是返回 String 类型的方法。
感谢指教
【问题讨论】:
-
你总是附加相同的字符串吗?
-
为了清楚起见,我编辑了这个问题。我认为编译器使用 StringBuilder 作为优化,因为连接字符串无效。但我还是不明白这两行。
-
第一个重载采用
String而不是数组。String数组的类型签名将使用左括号:[Ljava.lang.String;。 -
感谢戴夫的精准。起初我没有发现括号指定了函数签名。现在我知道了:)