我正在做一个项目,从int到String的所有转换都是这样完成的:

int i = 5;
String strI = "" + i;

我不熟悉Java。

这是惯例吗,还是像我猜想的那样,出了什么问题?


当前回答

我知道的另一种方法来自Integer类:

Integer.toString(int n);
Integer.toString(int n, int radix);

一个具体的例子(尽管我认为你不需要):

String five = Integer.toString(5); // returns "5"

它也适用于其他基本类型,例如Double.toString。

请看这里了解更多细节。

其他回答

这不仅仅是优化。我不喜欢

"" + i

因为它没有表达出我真正想做的事情。

我不想将一个整数附加到一个(空)字符串。我想把一个整数转换成字符串:

Integer.toString(i)

或者,不是我的首选,但仍然比串联更好,获得一个对象的字符串表示(整数):

String.valueOf(i)

1. 对于经常调用的代码,比如在循环中,优化当然也是不使用串联的一个原因。

2. 这对于在System.out中使用真正的连接是无效的。println("Index: " + i);or String id = " id " + i;

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美分了,是吗?哈哈

十多年前,我在一门本科水平的java入门课程中教授了这种技术。但是,我应该指出,IIRC,我们还没有接触到String和Integer类方法。

这种技术很简单,打字也很快。如果我所做的只是打印一些东西,我将使用它(例如,System.out。Println ("" + i);。然而,我认为这不是进行转换的最佳方式,因为当它以这种方式使用时,需要考虑一下才能意识到发生了什么。此外,如果性能是一个问题,它似乎更慢(下文以及其他答案)。

就我个人而言,我更喜欢Integer.toString(),因为它很明显会发生什么。String.valueOf()将是我的第二选择,因为它似乎令人困惑(看看darioo回答后的评论)。

我写了一些类来测试这三种技术:"" + I,整数。toString和String.ValueOf。每个测试只是将整数从1到10000转换为字符串。然后,我分别用Linux time命令运行了五次。Integer.toString()比String.valueOf()稍微快一次,他们捆绑了三次,String.valueOf()更快一次;然而,这种差异从来没有超过几毫秒。

“”+ i技术在每个测试中都比这两者都慢,除了一个测试,它比Integer.toString()快1毫秒,比String.valueOf()慢1毫秒(显然是在同一个测试中,String.valueOf()比Integer.toString()快)。虽然它通常只慢了几毫秒,但有一个测试慢了大约50毫秒。YMMV。

这取决于你想如何使用你的String。这可以帮助:

String total =  Integer.toString(123) + Double.toString(456.789);

这是可以接受的,但我从来没有写过这样的东西。我更喜欢这样:

String strI = Integer.toString(i);