Java:valueOf vs copyValueOf

时间:2018-01-07 05:05:34

标签: java string value-of

valueOfcopyValueOf之间有什么区别?我查看了GrepCode,发现两者都返回完全相同的东西。

copyValueOf:

  

参数:   数据字符数组。

     

返回:   包含字符数组字符的字符串。

     

public static String copyValueOf(char data []){           return new String(data);     }

的valueOf:

  

返回char数组参数的字符串表示形式。复制字符数组的内容;后续修改字符数组不会影响返回的字符串。

     

参数:数据字符数组。

     

返回:   包含字符数组字符的字符串。

     

public static String valueOf(char data []){           return new String(data);      }

所以,如果两者都做同样的事情,那么为什么一个人不被弃用?

3 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样:

  • 这两种方法是等效的。
  • javadocs明确指出这两种方法是等价的。并且copyValueOf清楚地指出了(温和)首选的valueOf方法。
  • 两个版本之间没有任何性能差异。实现是相同的。
  • 弃用一种或另一种方法会适得其反,因为它会促使人们修复"代码没有被破坏。这(可以说)是浪费时间,它会惹恼很多人。
  • 删除一种或其他方法会破坏向后兼容性......没有充分理由。那将真的惹恼了很多人。

唯一的另一个问题是为什么没有注释将方法标记为"过时"。我认为答案就是如果你使用过时的API方法并不重要。当然,Java团队实现这样的机制并不重要......然后花费大量时间来判断这样的API是否已经过时了#34;保证标记等等(大多数人不希望Java团队在这些事情上浪费时间。我们希望他们花时间来实现对Java的改进,这实际上会产生真正的改变。)

处理此问题的更合适的方法是,有人可以增强第三方某些样式检查器或错误检查工具来标记(所谓的)过时方法的使用。这显然不是Oracle的问题......但如果您(@StarCoder)真的关心这个问题,那么您可以将其作为 问题。

答案 1 :(得分:1)

  

注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它很危险,或者因为存在更好的替代方案。在未弃用的代码(Annotation Type Deprecated)中使用或覆盖已弃用的程序元素时,编译器会发出警告。

这两种方法字面上做同样的事情;这意味着这两种方法都不危险或更好。这也许是他们不愿意弃用这两种方法的原因。

答案 2 :(得分:1)

这两种方法都有相同的用途,但它们的内部实现略有不同(根据String.java中的评论 - 较旧的实现):

copyValueOf(char data[])

返回与指定字符数组等效的字符串。它会创建一个新数组并将字符复制到其中。

valueOf(char data[])

返回与指定字符数组等效的字符串。使用原始数组作为字符串的主体(即它没有 将其复制到新数组中。

旧版本在其代码中具有redudndency。但在较新版本的Java中,实现方式相同。提供较旧的方法,以便不了解新版本的旧程序员可以使用它。