gpt4 book ai didi

java - 在java中将整数转换为字符串的最快方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:03:55 25 4
gpt4 key购买 nike

每次我必须将 int 转换为 String 时,我都会选择 ""+aInteger.toString(a )。现在我想知道哪种方法更快,所以我编写了一个简单的基准测试,调用 function_1、function_2 和 function_3 10000000 次并打印处理这些函数需要多长时间。以下是函数:

public static String i="";
public static String j="";
public static String k="";

public static void function_1()
{
i=Integer.toString(getOne());
}

public static void function_2()
{
j=""+1;
}

public static void function_3()
{
j=""+getOne();
}

public static int getOne()
{
return 1;
}

输出是:

Benchmarking starting...
Executing function_1 10000000 time(s)...
Done executing function_1 in 476 ms.
Executing function_2 10000000 time(s)...
Done executing function_2 in 8 ms.
Executing function_3 10000000 time(s)...
Done executing function_3 in 634 ms.
Benchmarking complete!

我认为 function_2 如此之快,因为它被编译为

public static void function_2()
{
j="1";
}

为了避免这种情况,我改用函数 getOne()。但这是有趣的部分(对我来说):function_3 必须在不使用 Object 的原始 toString 方法的情况下进行编译(在这种情况下 Integer.toString(1) 因为 int 是原始的)。我的问题是:编译器实际上是如何威胁 ""+1 的,所以它比调用 Integer.toString(1) 慢?

最佳答案

""1 在编译时已知。这就是为什么在 function_2""+ 1 在转换为字节码时实际上被替换为 "1"

getOne() 结果在编译时是未知的,因此连接将在运行时完成。但是因为串联 (+) 效率不高,编译器可能会将其更改为基于 StringBuilder.append() 的实现。

不相信我?试试:javap -c ClassName.class 你会看到类似这样的东西:

public static void function_2();
Code:
0: ldc #39 // String 1
2: putstatic #16 // Field j:Ljava/lang/String;
5: return


public static void function_3();
Code:
0: new #42 // class java/lang/StringBuilder
3: dup
4: invokespecial #44 // Method java/lang/StringBuilder."<init>":()V
7: invokestatic #28 // Method getOne:()I
10: invokevirtual #45 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
13: invokevirtual #49 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
16: putstatic #16 // Field j:Ljava/lang/String;
19: return

function_2() 只有一个字符串“1”,而 function_3 有所有这些方法调用,内部有额外的 StringBuilder :)

请记住,一些优化可能会在运行时发生,但这种行为是 JVM 的,并且它依赖于配置。

关于java - 在java中将整数转换为字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669067/

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