我正在做一个项目,从int到String的所有转换都是这样完成的:
int i = 5;
String strI = "" + i;
我不熟悉Java。
这是惯例吗,还是像我猜想的那样,出了什么问题?
我正在做一个项目,从int到String的所有转换都是这样完成的:
int i = 5;
String strI = "" + i;
我不熟悉Java。
这是惯例吗,还是像我猜想的那样,出了什么问题?
当前回答
Personally I think that "" + i does look as the original question poster states "smelly". I have used a lot of OO languages besides Java. If that syntax was intended to be appropriate then Java would just interpret the i alone without needing the "" as desired to be converted to a string and do it since the destination type is unambiguous and only a single value would be being supplied on the right. The other seems like a 'trick" to fool the compiler, bad mojo when different versions of Javac made by other manufacturers or from other platforms are considered if the code ever needs to be ported. Heck for my money it should like many other OOL's just take a Typecast: (String) i. winks
考虑到我的学习方式以及在快速阅读其他代码时易于理解这样的结构,我投票给Integer.toString(I)方法。忘记一个ns或两个在Java如何实现的东西在后台vs. String. valueof (i)这个方法感觉对我来说是正确的,并确切地说正在发生什么:我有一个整数,我希望它转换为字符串。
有一个很好的观点已经说过几次了,也许只是在前面使用StringBuilder是一个很好的答案,构建混合文本和int或其他对象的字符串,因为这将在后台使用,对吗?
我只是把我的两分钱投到曼斯问题的答案中……微笑
经过思考后,编辑成我自己的答案:
好的,好的,我在思考这个问题,String. valueof (I)也很好,它说:我想要一个表示整数值的字符串。哈哈,英语比Java更难解析!但是,我留下我其余的答案/评论…我总是被教导使用方法/函数链的最低级别,如果可能的话,仍然保持可读性,所以如果字符串。valueOf调用Integer。那么为什么要用整个橙子,如果你只是要剥它,嗯?
为了澄清我对StringBuilder的评论,我用文字文本和int's的组合构建了很多字符串,它们最终变得又长又丑,调用了上面提到的嵌入在+'s之间的例程,所以在我看来,如果这些成为SB对象,无论如何,append方法有重载,它可能会更干净,只是继续使用它…所以我想我现在在这件事上要花5美分了,是吗?哈哈
其他回答
就我个人而言,我没有看到这段代码有什么不好的地方。
当您想记录一个int值,而记录器只接受一个字符串时,它非常有用。我想说,当你需要调用一个接受String的方法,但你有一个int值时,这样的转换是很方便的。
至于整数之间的选择。toString或String。这完全是个人品味的问题。 ...内部是字符串。valueOf调用Integer。顺便说一下toString方法。:)
有多种转换为字符串的方法:
StringBuilder string = string.append(i).toString();
String string = String.valueOf(i);
String string = Integer.toString(i);
正如已经指出的,Integer.toString()或String.valueOf()是正确的方法。我很好奇,做了一个快速的基准测试:
Integer.toString(i)和String.valueOf(i)在性能上基本相同,Integer.toString(i)稍微快一点。但是i + ""要慢1.7倍。
import java.util.Random;
public class Test {
public static void main(String[] args) {
long concat = 0;
long valueOf = 0;
long toString = 0;
int iterations = 10000;
int runs = 1000;
for(int i = 0; i < runs; i++) {
concat += concat(iterations);
valueOf += valueOf(iterations);
toString += to_String(iterations);
}
System.out.println("concat: " + concat/runs);
System.out.println("valueOf: " + valueOf/runs);
System.out.println("toString: " + toString/runs);
}
public static long concat(int iterations) {
Random r = new Random(0);
long start = System.nanoTime();
for(int i = 0; i < iterations; i++) {
String s = r.nextInt() + "";
}
return System.nanoTime() - start;
}
public static long valueOf(int iterations) {
Random r = new Random(0);
long start = System.nanoTime();
for(int i = 0; i < iterations; i++) {
String s = String.valueOf(r.nextInt());
}
return System.nanoTime() - start;
}
public static long to_String(int iterations) {
Random r = new Random(0);
long start = System.nanoTime();
for(int i = 0; i < iterations; i++) {
String s = Integer.toString(r.nextInt());
}
return System.nanoTime() - start;
}
}
输出:
concat: 1004109
valueOf: 590978
toString: 587236
String strI = String.valueOf(i);
String string = Integer.toString(i);
两种方法都是正确的。
这不仅仅是优化。我不喜欢
"" + i
因为它没有表达出我真正想做的事情。
我不想将一个整数附加到一个(空)字符串。我想把一个整数转换成字符串:
Integer.toString(i)
或者,不是我的首选,但仍然比串联更好,获得一个对象的字符串表示(整数):
String.valueOf(i)
1. 对于经常调用的代码,比如在循环中,优化当然也是不使用串联的一个原因。
2. 这对于在System.out中使用真正的连接是无效的。println("Index: " + i);or String id = " id " + i;