当需要将原语转换为String(例如,传递给需要String的方法)时,基本上有两个选择。

int为例,给出:

int i;


我们可以执行以下操作之一:

someStringMethod(Integer.toString(i));
someStringMethod(i + "");


第一个是“正式”方法,第二个似乎有点“黑客”。

当然,它的代码更少了,并且更容易阅读“ hack”恕我直言。
但是使用“ hack”是“好的”编码风格吗?

最佳答案

将*转换为String的最佳方法是使用:

String.valueOf(x)


它适用于实现toString()的原始类型,包装器类和Object。

其中x是任何类型的图元或对象。如果为null,则返回字符串'null'。

之所以最好,是因为使用“ +”操作数表示字符串连接,加上“”表示字符串实例化。如果您使用“” +东西反编译一个类,则会看到编译器将其转换为多个操作。

“”串联结果与String.valueOf()相同,但价格更高。
性能差异可能可以忽略不计,但是好的程序员不会在有更好的方法(恰好是正确的方法)时写'“” + something'将某物转换为String。

对于数组,请查看Arrays.toString()和-better- Arrays.deepToString()


  但是使用“ hack”是“好的”编码风格吗?


有时,语法黑客会使代码变得更好。但是上面的情况并不是这些情况之一。
“”串联不算是好的代码。

双括号实例化是一个有用的语法hack的示例:

List<String> list = new ArrayList<String>() {{
    add("foo");
    add("bar");
    add("baz");
}};


代替

List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
list.add("baz");


“ +”东西更多的是代码味道,而不是可以提高可读性的hack。任何有经验的人都会想到缺少一些API和语言知识的Java开发人员。

其他有趣的“ hack”是流畅的API(例如Mockito),dsl或lambda4j之类的东西,这确实是一个hack。

关于java - 原始+“”与Wrapper.toString(原始),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14026929/

10-10 19:04