gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:56 25 4
gpt4 key购买 nike

我写了这段代码来比较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 +运算符在内部使用StringBuilderappend()。它创建临时对象,因为它是不可变的。我试图通过计算使用String和使用StringBuffer时创建的对象数量来证明这一点。使用静态变量来计算对象的数量对我没有帮助,因为我无法修改String类。我找到了这个link 。看起来很有希望。但我不知道如何修改 Object.java 文件。在之前和之后使用 System.currentTimeInMillis() 没有帮助,因为此操作非常小。 所以我的问题是

  1. 有什么方法可以分析或比较这些类的性能吗?
  2. 如何统计程序中创建的 String 对象的数量?

最佳答案

首先,字符串的连接是使用 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 个字符串对象“a”和“b”,它们是字符串文字(也是字符串对象),它们进入字符串常量池。 “ab”将在运行时期间使用StringBuilder创建。

StringBuffer线程安全/同步的,因此它会比 StringBuilder 慢。

关于java - 计算创建的字符串对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28346016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com