我写了这段代码来比较String
和StringBuffer
。
public static void main(String[] args) {
String inputText = "let us learn pig latin";
usingString(inputText);
usingStringBuffer(inputText);
}
public static void usingString(String input) {
String pigLatinText = new String();
input = input.trim();
String tokens[] = input.split(" ");
for (int i = 0; i < tokens.length; i++) {
String temp = tokens[i];
temp = temp.substring(1) + temp.charAt(0);
temp += "ay";
pigLatinText += temp+" ";
}
System.out.println("Using String :"+pigLatinText);
}
public static void usingStringBuffer(String input) {
String pigLatin = new String();
input = input.trim();
String tokens[] = input.split(" ");
for (int i = 0; i < tokens.length; i++) {
StringBuffer temp = new StringBuffer(tokens[i]);
temp.append(temp.charAt(0)).deleteCharAt(0);
temp.append("ay");
pigLatin += temp+" ";
}
System.out.println("Using String Buffer :"+pigLatin);
}
我知道String
+运营商在内部使用StringBuilder
&#39; s append()
。它创建临时对象,因为它是不可变的。
我正在尝试使用String
并使用StringBuffer
来计算来计算创建的对象数量。
使用静态变量来计算对象的数量对我没有帮助,因为我无法修改String
类。我找到了link。看起来很有希望。但我不知道如何修改Object.java
文件。
使用 System.currentTimeInMillis()
之前和之后都没有帮助,因为此操作非常小。 所以我的问题是
答案 0 :(得分:1)
首先使用StringBuilder
而不是StringBuffer
来完成串联的字符串。
示例:
public static void main(String[] args) {
String s = "a";
String s1 = s + "b";
}
s1=s+"b"
16: invokevirtual #31 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
在这里,您创建3个字符串对象&#34; a&#34;和&#34; b&#34;是字符串文字(它们也是字符串对象),它们进入字符串常量池。将使用"ab"
在运行时期间创建StringBuilder
。
StringBuffer
线程安全/已同步,因此速度会慢于StringBuilder
。