我应该在不需要时将整数解析为 Java 中的字符串吗?
Should I parse an integer to string in Java, when not necessary?
我想将一个整数附加到一个字符串。
这样做有区别吗:
String str = "Number: " + myInt;
和
String str = "Number: " + Integer.toString(myInt);
换句话说,我是否应该在不需要时使用 Integer.toString()
方法?
编辑: 我不是好奇 "How to convert an integer to string",而是 "if I am required to use a certain method, to convert".
没有区别。编译器 (Oracle JVM 1.8) 将两个片段转换为
(new StringBuilder()).append("Number: ").append(myInt).toString();
就我个人而言,我不会使用 Integer.toString()
,因为它会增加代码的噪音,而且不会提供清晰度和可读性。
编辑
原回答有误,说明会有细微差别(看历史回答!)
澄清 Augusto 的回答:您可以 运行 一个简单的基准测试。
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Race Started");
int []noArr = new int[100];
for(int i=0;i<100;i++)
noArr[i] = i+1;
String str = "";
long startedTime = System.nanoTime();
for(int j=0;j<100;j++)
str = str + noArr[j];
long runningTime = System.nanoTime() - startedTime;
System.out.println("Concatenation String + int took : "+runningTime);
startedTime = System.nanoTime();
String str2 = "";
for(int h=0;h<100;h++)
str2 = str2 + Integer.toString(noArr[h]);
runningTime = System.nanoTime() - startedTime;
System.out.println("Concatenation String with Wrapper obj took : "+runningTime);
startedTime = System.nanoTime();
StringBuilder sb = new StringBuilder("");
for(int k=0;k<100;k++)
sb.append(k);
runningTime = System.nanoTime() - startedTime;
System.out.println("StringBuilder took : "+runningTime);
}
摘要{以纳秒为单位的时间}
比赛开始(这些是粗略的值;但您可以看到巨大的差异)
- 连接字符串 + int 花费:250555
- 使用 Wrapper obj 的连接字符串:485413
- StringBuilder 占用:98411
我想将一个整数附加到一个字符串。 这样做有区别吗:
String str = "Number: " + myInt;
和
String str = "Number: " + Integer.toString(myInt);
换句话说,我是否应该在不需要时使用 Integer.toString()
方法?
编辑: 我不是好奇 "How to convert an integer to string",而是 "if I am required to use a certain method, to convert".
没有区别。编译器 (Oracle JVM 1.8) 将两个片段转换为
(new StringBuilder()).append("Number: ").append(myInt).toString();
就我个人而言,我不会使用 Integer.toString()
,因为它会增加代码的噪音,而且不会提供清晰度和可读性。
编辑
原回答有误,说明会有细微差别(看历史回答!)
澄清 Augusto 的回答:您可以 运行 一个简单的基准测试。
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Race Started");
int []noArr = new int[100];
for(int i=0;i<100;i++)
noArr[i] = i+1;
String str = "";
long startedTime = System.nanoTime();
for(int j=0;j<100;j++)
str = str + noArr[j];
long runningTime = System.nanoTime() - startedTime;
System.out.println("Concatenation String + int took : "+runningTime);
startedTime = System.nanoTime();
String str2 = "";
for(int h=0;h<100;h++)
str2 = str2 + Integer.toString(noArr[h]);
runningTime = System.nanoTime() - startedTime;
System.out.println("Concatenation String with Wrapper obj took : "+runningTime);
startedTime = System.nanoTime();
StringBuilder sb = new StringBuilder("");
for(int k=0;k<100;k++)
sb.append(k);
runningTime = System.nanoTime() - startedTime;
System.out.println("StringBuilder took : "+runningTime);
}
摘要{以纳秒为单位的时间}
比赛开始(这些是粗略的值;但您可以看到巨大的差异)
- 连接字符串 + int 花费:250555
- 使用 Wrapper obj 的连接字符串:485413
- StringBuilder 占用:98411