当需要将原语转换为字符串时,例如传递给需要字符串的方法,基本上有两种选择。
以int为例,给出了:
int i;我们可以执行以下操作之一:
someStringMethod(Integer.toString(i));
someStringMethod(i + "");第一个是“正式”的方法,第二个看起来有点“黑客”的意思。
这当然是更少的代码和更容易阅读的“黑客”IMHO。
但是使用"hack“是一种”好“的编码风格吗?
发布于 2012-12-25 09:27:51
将*转换为字符串的最好方法是使用:
String.valueOf(x)它适用于基本类型、包装类和实现toString()的对象。
其中x是任何类型的基元或对象。如果为null,则返回字符串'null‘。
这是最好的原因,因为使用"+“操作数意味着字符串连接,加上"”意味着字符串实例化。如果你使用“”+某个东西来反编译一个类,你会看到编译器将它转换成多个操作。
"“连接结果与String.valueOf()相同,但代价稍高一些。性能差异可能可以忽略不计,但优秀的程序员不会在有更好的方法时编写'"“+某物‘来将某些东西转换为字符串,这恰好是正确的方法:)。
对于阵列,可以查看Arrays.toString()和-更好的- Arrays.deepToString()
但是使用"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");“”+某种东西与其说是一种提高可读性的技巧,不如说是一种代码味道;任何有经验的人都会认为Java开发人员对API和语言缺乏一定的了解。
其他有趣的“黑客”是流利的API(如Mockito),数字用户线,或像lambda4j这样的东西,这是一个相当不错的黑客。
发布于 2012-12-25 09:19:21
这不是一个好主意,但也不会有太大的危害。
在这两个示例中,Integer.toString()都是由JVM调用的(即使在第一种情况下不是直接调用)。
在第二个示例中,JVM可能会构造两个字符串,然后生成连接结果。根据优化情况,这可能会导致0、1或2个额外的字符串进行垃圾收集。
从代码编写的角度来看,第三个较短,但对于正在发生的事情也可能不太透明。
第二种方法在可读性方面的问题如下:
int i = 1, j = 2;
someStringMethod(i + j + "" + i + j + "");产生:
someStringMethod(312);而不是
someStringMethod(33);发布于 2012-12-25 09:45:10
当字符串使用+符号形成时,jvm将创建一个中间字符串/字符串缓冲区对象来执行转换,这不是最佳方式。此外,+号是左关联的,所以当在像""+1+2这样的表达式中使用时,结果是12,而不是"3".So,最好使用String.toValue()或Type.toString()。
https://stackoverflow.com/questions/14026929
复制相似问题