Java:valueOf 与 copyValueOf

Java: valueOf vs copyValueOf

valueOfcopyValueOf 有什么区别。我查看了 GrepCode,却发现 return 和 完全 是同一回事。

copyValueOf:

Parameters: data the character array.

Returns: a String that contains the characters of the character array.

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

valueOf:

Returns the string representation of the char array argument. The contents of the character array are copied; subsequent modification of the character array does not affect the returned string.

Parameters: data the character array.

Returns: a String that contains the characters of the character array.

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

所以如果两者做同样的事情,那为什么没有弃用一个呢?

A program element annotated @Deprecated is one that programmers are discouraged from using, typically because it is dangerous, or because a better alternative exists. Compilers warn when a deprecated program element is used or overridden in non-deprecated code (Annotation Type Deprecated).

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

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

copyValueOf(char data[])

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

valueOf(char data[])

Returns 与指定字符数组等效的字符串。使用原始数组作为字符串的主体(即它不 将其复制到一个新数组)。

旧版本的代码冗余。但在 Java 的较新版本中,实现方式相同。旧方法可用,以便不了解新版本的老程序员可以使用它。

正如其他人指出的那样:

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

唯一的另一个问题是为什么没有注释将方法标记为“过时”。我认为答案是,使用过时的 API 方法并不重要。当然,Java 团队实施这样的机制并不重要......然后花费大量时间来决定某某 API 是否“已经过时了” " 以保证标记等

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

处理这个问题的更合适的方法是让某人编写或增强 3rd-party 样式检查器或错误检查器工具来标记(所谓的)过时方法的使用。这显然不是 Oracle 的问题,但如果您(亲爱的 Reader)真的很关心这个问题,您可以把它变成 您的 问题。