为什么要在Java中使用copyValueOf方法?

为什么要在Java中使用copyValueOf方法?,java,string,Java,String,我正在学习java教程。copyValueOf方法的语法如下所示 public static String copyValueOf(char[] data) 它表示该方法是静态的,这意味着必须使用类名调用它。 但是这里的程序在被调用的地方工作得很好,关于对象,为什么会这样 public class Test { public static void main(String args[]) { char[] Str1 = {'h', 'e', 'l', 'l', 'o', ' ',

我正在学习java教程。
copyValueOf
方法的语法如下所示

public static String copyValueOf(char[] data)
它表示该方法是静态的,这意味着必须使用类名调用它。 但是这里的程序在被调用的地方工作得很好,关于对象,为什么会这样

public class Test {

  public static void main(String args[]) {
    char[] Str1 = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
    String Str2 = "";
    Str2 = Str2.copyValueOf( Str1 );
    System.out.println("Returned String: " + Str2);
  }

}
此外,我觉得这是多余的,因为上面的2条第4行和第5行将被替换为该行

String Str2 = new String(Str1);

所以,告诉我它在哪里有用。

静态意味着该方法与实例无关,而与类相关。您可以从对象或从类调用它,这不会改变任何内容。唯一的变化是,如果从对象而不是从类调用静态方法,则不清楚您调用的是静态方法,因此建议从类调用它

为了说明这一点,在您的代码中,当您编写
str2.copyValueOf(str1)
时,不清楚它会做什么。因为对一个对象调用一个方法,读者会期望这会对该对象做些什么,或者返回该对象的一个属性,但事实并非如此。如果您编写
String.copyValueOf(str1)
,读者就会知道您调用了一个与String相关但不会访问或修改实例的静态方法,在这里,读者希望此方法只返回与
str1
相关的内容


静态方法在这种情况下很有用,因为它会阻止您在不需要初始化对象时初始化对象

String str2 = "";
str2 = str2.copyValueOf(Str1);
在这里创建两个对象。首先是一个空字符串。然后是第二个字符串,其值为str1。第一次初始化是无用的,因为您将在创建第一个String对象之后删除它。它毫无意义地使用内存。因此,您可以删除初始化

String str2;
str2 = str2.copyValueOf(str1);
这里的问题是,由于没有初始化str2,系统将其定义为
null
。所以你不能对它调用方法<代码>str2.copyValueOf(str1)将抛出一个
NullPointerException
。但幸运的是,该方法是静态的,因此我们可以直接从类中调用它。代码变为

String str2;
str2 = String.copyValueOf(str1);
注意:这可以在一行中减少,但这与执行时发生的情况无关:
String str2=String.copyValueOf(str1)


String str2=String.copyValueOf(str1)之间没有区别
字符串str2=新字符串(str1)。由于方法
copyValueOf(char[])
只需调用构造函数
String(char[])
。发件人:


因为静态方法可以在实例上调用。反之亦然。静态表示方法与实例无关,而与类相关。您可以从对象或从类调用它,这不会改变任何内容。唯一的变化是,如果从对象而不是从类调用静态方法,则不清楚您在调用静态方法,因此建议从classIn Java调用它,与C/C++不同,字符数组与字符串不同。这可能是一个教育示例。不是“有用”的生产代码。它似乎让你问了它想让你问的问题。为了说明我的评论,在你的代码中,不清楚它在编写
Str2.copyValueOf(Str1)
时做了什么。因为对一个对象调用一个方法,读者会期望这会对该对象做一些事情,或者返回该对象的一个属性,但事实并非如此。如果您编写
String.copyValueOf(Str1)
,读者就会知道您调用了一个与String相关但不会访问或修改实例的静态方法,在这里读者希望此方法返回一些仅与Str1相关的内容
 /**
 * Returns a String that represents the character sequence in the
 * array specified.
 *
 * @param   data   the character array.
 * @return  a <code>String</code> that contains the characters of the
 *          character array.
 */
public static String copyValueOf(char data[]) {
    return new String(data);
}