当需要将原语转换为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/