首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Primitive + "“与Wrapper.toString(primitive)

Primitive + "“与Wrapper.toString(primitive)
EN

Stack Overflow用户
提问于 2012-12-25 09:10:21
回答 4查看 290关注 0票数 1

当需要将原语转换为字符串时,例如传递给需要字符串的方法,基本上有两种选择。

int为例,给出了:

代码语言:javascript
复制
int i;

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

代码语言:javascript
复制
someStringMethod(Integer.toString(i));
someStringMethod(i + "");

第一个是“正式”的方法,第二个看起来有点“黑客”的意思。

这当然是更少的代码和更容易阅读的“黑客”IMHO。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-25 09:27:51

将*转换为字符串的最好方法是使用:

代码语言:javascript
复制
String.valueOf(x)

它适用于基本类型、包装类和实现toString()的对象。

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

这是最好的原因,因为使用"+“操作数意味着字符串连接,加上"”意味着字符串实例化。如果你使用“”+某个东西来反编译一个类,你会看到编译器将它转换成多个操作。

"“连接结果与String.valueOf()相同,但代价稍高一些。性能差异可能可以忽略不计,但优秀的程序员不会在有更好的方法时编写'"“+某物‘来将某些东西转换为字符串,这恰好是正确的方法:)。

对于阵列,可以查看Arrays.toString()和-更好的- Arrays.deepToString()

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

有时语法黑客会让代码变得更好。但上面的案例并不是真正的案例之一。"“连接不被认为是好的代码。

一个有用的语法技巧的例子是双花括号实例化:

代码语言:javascript
复制
List<String> list = new ArrayList<String>() {{
    add("foo");
    add("bar");
    add("baz");
}};

而不是

代码语言:javascript
复制
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
list.add("baz");

“”+某种东西与其说是一种提高可读性的技巧,不如说是一种代码味道;任何有经验的人都会认为Java开发人员对API和语言缺乏一定的了解。

其他有趣的“黑客”是流利的API(如Mockito),数字用户线,或像lambda4j这样的东西,这是一个相当不错的黑客。

票数 4
EN

Stack Overflow用户

发布于 2012-12-25 09:19:21

这不是一个好主意,但也不会有太大的危害。

在这两个示例中,Integer.toString()都是由JVM调用的(即使在第一种情况下不是直接调用)。

在第二个示例中,JVM可能会构造两个字符串,然后生成连接结果。根据优化情况,这可能会导致0、1或2个额外的字符串进行垃圾收集。

从代码编写的角度来看,第三个较短,但对于正在发生的事情也可能不太透明。

第二种方法在可读性方面的问题如下:

代码语言:javascript
复制
int i = 1, j = 2;
someStringMethod(i + j + "" + i + j + "");

产生:

代码语言:javascript
复制
someStringMethod(312);

而不是

代码语言:javascript
复制
someStringMethod(33);
票数 4
EN

Stack Overflow用户

发布于 2012-12-25 09:45:10

当字符串使用+符号形成时,jvm将创建一个中间字符串/字符串缓冲区对象来执行转换,这不是最佳方式。此外,+号是左关联的,所以当在像""+1+2这样的表达式中使用时,结果是12,而不是"3".So,最好使用String.toValue()或Type.toString()。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14026929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档