计算创建的字符串对象的数量

时间:2015-02-05 14:05:51

标签: java string stringbuffer

我写了这段代码来比较StringStringBuffer

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() 之前和之后都没有帮助,因为此操作非常小。 所以我的问题是

  1. 有没有办法分析或比较这些类的表现?
  2. 如何计算程序中创建的String对象的数量?

1 个答案:

答案 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