Java:将char []转换为CharSequence

Chr*_*way 18 java string

将a转换char[]为a 的最直接和/或最有效的方法是CharSequence什么?

Tom*_*ine 32

没有副本:

CharSequence seq = java.nio.CharBuffer.wrap(array);
Run Code Online (Sandbox Code Playgroud)

但是,该new String(array)方法可能更容易编写,更易于阅读和更快.

  • @tackline——这个答案现在已经有 10 年的历史了。我想知道您是否仍然认为 CharBuffer 可能比将数组复制到 String 慢? (2认同)

jjn*_*guy 9

A String是一个CharSequence.所以你可以创建一个新的String给定的char[].

CharSequence seq = new String(arr);
Run Code Online (Sandbox Code Playgroud)


Woo*_*off 5

语境:

char[] 而不是 String 的最常见用法之一是“临时”存储机密/密码。将其传递给某些服务/客户端的初始化...此类初始化后不需要秘密。但是在java字符串中不可能从内存中清除它(手动或通过垃圾收集)......所以,基本上禁止在字符串中存储秘密。

推荐方式:将机密加载到 char[],将其传递给 init 进程,然后手动清除(设置 forEach char[i] = '0';)。在专业博客上阅读有关此问题的信息...

问题/答案:

  • 如果 service/cliets API 仅接受 pass/secret 作为字符串 - 不要使用它(并报告错误)
  • 如果 service/cliets API 接受 char 数组,则使用它并清除它
  • 如果服务/客户端 API 接受 CharSequence,则可以使用 java.nio.CharBuffer.wrap(array) 并在之后清除

注意:不幸的是,甚至必须检查第 3 方服务/客户端初始化源代码,碰巧他们将 char 数组转换为代码深处的字符串...)-:明智地选择您的依赖项。