这是在 Java 中将字符转换为字符串的正确方法吗?

Gov*_*mar 25 java string character

在为返回boolean需要两个Strings的函数编写单元测试时,我需要逐个测试字母表中的每个字符 ( 'a'- 'z') 作为参数之一,所以我写了这个来做到这一点:

for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, new String(c));
} 
Run Code Online (Sandbox Code Playgroud)

我会认为这是允许的,但事实并非如此,所以我只是这样做了:

for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
} 
Run Code Online (Sandbox Code Playgroud)

这是在Java中将chara转换为a的可靠方法String吗?这是首选方式吗?我对 Java 不太了解,所以想对此进行一些澄清。

Rob*_*sen 36

最短的解决方案:

char c = 'a';
String s = "" + c;
Run Code Online (Sandbox Code Playgroud)

最干净(也可能是最有效的1)解决方案:

char c = 'a';

String s1 = String.valueOf(c);
// or
String s2 = Character.toString(c);
Run Code Online (Sandbox Code Playgroud)

与您的方法相比,上述方法可以避免将原语装箱到Character对象中的开销。


1第一种方法中字符串连接的轻微低效可能会被编译器或运行时优化掉,所以一个人(如果有这样的倾向)真的必须运行一个微基准来确定实际性能。像这样的微优化很少值得付出努力,依靠串联来强制字符串转换看起来不太好。

  • 上次我查看时,Sun 的 `javac` 编译器自动将 `String s = "" + c;` 转换为 `String s = String.valueOf(c);`,因此性能是相同的。 (8认同)
  • @尼尔唷!我开始认为 Stack Overflow 上已经不存在我写脚注的那种人了:) (4认同)