Java:valueOf vs copyValueOf

Sta*_*der 7 java string value-of

valueOf和之间有什么区别copyValueOf.我看了GrepCode,却发现两者都返回完全相同的东西.

copyValueOf:

参数:数据字符数组.

返回:包含字符数组字符的String.

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

的价值:

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

参数:数据字符数组.

返回:包含字符数组字符的String.

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

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

Ste*_*n C 4

正如其他人指出的那样:

  • 这两种方法是等效的。
  • javadoc 明确指出这两种方法是等效的。并copyValueOf明确向读者指出(温和)首选的valueOf方法。
  • 两个版本之间没有性能差异。实现是相同的。
  • 弃用一种或另一种方法会适得其反,因为它会促使人们“修复”未损坏的代码。这(可以说)是浪费时间,而且会惹恼很多人。
  • 删除一种或另一种方法会破坏向后兼容性......没有充分的理由。这确实会惹恼很多人。

唯一的另一个问题是为什么没有注释将方法标记为“过时”。我认为答案是,如果您使用过时的 API 方法也没关系。当然,对于 Java 团队来说,实现这样的机制并不够重要……然后花费大量时间来决定某个 API 是否“足够过时”以保证标记等。

(大多数人不希望 Java 团队把时间浪费在这些事情上。我们希望他们把时间花在对 Java 进行改进上,这将对程序性能和程序员的生产力产生真正的影响。)

处理此问题的更合适方法是让某人编写或增强第三方样式检查器或错误检查器工具来标记使用(所谓的)过时方法。这显然不是 Oracle 的问题,但如果您(亲爱的读者)真的担心这一点,您可以将其作为您的问题。