我在Java中看到了将a转换char为a的四种选择Stirng.
v = Something.lookup(new String((char)binaryData[idx])); // SORRY! Wrong.
v = Something.lookup("" + (char)binaryData[idx]);
v = Something.lookup(String.valueOf((char)binaryData[idx]));
v = Something.lookup(Character.toString((char)binaryData[idx])));
Run Code Online (Sandbox Code Playgroud)
我认为第一个是最慢的.第二个很方便.我推测第三个可能返回先前创建的String实例,但我不确定,API文档没有这么说.这同样适用于备选方案四.这种重用实例将是非常幸运的,因为基于散列的查找可以利用hashCode()缓存String.(API文档中也没有描述哪个功能,但很多人告诉我.)
我来自C++,我觉得缺乏复杂的信息令人不安.:-)我的推测是否正确?我们是否有任何形式的性能保证和缓存机制的官方文档?
首先,Java规范没有说明有关这四种方法的性能,因此结果可能会因您使用的JRE版本和供应商而异.
如果您使用Oracle的JRE,您可以自己轻松检查源代码!在Java 8中,它如下:
鉴于char c有一些价值:
new String(c)不编译.没有这样的构造函数."" + c看起来很丑陋,笨重而且很棘手.在内部,它创建一个新的空StringBuilder,并将角色附加到它.然后它创建一个新的String实例StringBuilder.Character.toString(c)代表来String.valueOf(c).String.valueOf(c)创建一个新String实例.那么哪一个使用?
最可读的!
这String.valueOf(c)还是Character.toString(c)在我的观点!