为什么要在Java中使用copyValueOf方法?
我正在学习java教程。为什么要在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', ' ',
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);
}