这是在Java中将字符转换为字符串的正确方法吗? [复制]
Posted
技术标签:
【中文标题】这是在Java中将字符转换为字符串的正确方法吗? [复制]【英文标题】:Is this the correct way to convert a char to a String in Java? [duplicate] 【发布时间】:2020-08-11 16:53:40 【问题描述】:在为返回 boolean
的函数编写单元测试时,该函数需要两个 String
s,我需要按顺序测试字母表中的每个字符 ('a'
-'z'
) 作为参数之一,一个一个接一个,所以我写了这个来做到这一点:
for(char c = 'a'; c <= 'z'; c++)
assertTrue(MyClass.MyFunction(testSubject, new String(c));
我本以为这是允许的,但事实并非如此,所以我只是这样做了:
for(char c = 'a'; c <= 'z'; c++)
assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
这是在 Java 中将 char
转换为 String
的可靠方法吗?这是首选方式吗?我对 Java 不是很了解,所以想澄清一下。
【问题讨论】:
不是直接回答你的问题,但我会IntStream.range(0, 26).mapToObj(i -> Character.toString((char) ('a' + i))).forEach(x -> assertTrue(MyClass.MyFunction(testSubject, x)));
@ElliottFrisch 但为什么呢?这里不需要流,但即使你坚持在每个循环中都使用流,为什么不至少使用IntStream.rangeClosed('a', 'z')
?
没有单一的“正确”方式。可能至少有五种方法可以做到这一点:您选择哪种方式取决于时尚和科学事实。大多数情况下,这根本不重要,测试程序当然就是其中之一。
@PhilipRoman 因为它就在那里(埃德蒙希拉里)。因为我可以。因为我们想要(我认为是 Billie Piper)。这也是一种很酷的方法。
我原以为这是允许的 您认为可以调用不存在的String
构造函数吗?如果我错了,请纠正我,但据我所知,String
类中没有构造函数,它采用单个 char
参数。请注意char
与char[]
不同。
【参考方案1】:
最短的解决方案:
char c = 'a';
String s = "" + c;
最干净(也可能是最有效的1)解决方案:
char c = 'a';
String s1 = String.valueOf(c);
// or
String s2 = Character.toString(c);
与您的方法相比,上述方法避免了将原语装箱到 Character
对象中的开销。
1 第一种方法中字符串连接的效率低下可能会被编译器或运行时优化掉,所以一个(如果有人愿意的话)真的必须运行一个微基准来确定实际性能。像这样的微优化很少值得付出努力,并且依靠连接来强制字符串转换看起来不太好。
【讨论】:
上次看,Sun 的javac
编译器自动将String s = "" + c;
转换为String s = String.valueOf(c);
,所以性能是一样的。
@Neil 唷!我开始认为,我为那个脚注写的那种人在 Stack Overflow 上已经不存在了 :)
@Neil:很奇怪!对我来说,javac 1.8.0_101 和 Eclipse 编译器都会发出用于创建 StringBuilder
和调用 append
的代码。 Javac 10.0.1 发出调用动态指令。也许他们在以后几年更信任 JIT,而不是进行编译时优化。以上是关于这是在Java中将字符转换为字符串的正确方法吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 3 中将字节转换为十六进制字符串的正确方法是啥?