gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:13 24 4
gpt4 key购买 nike

我在教程点上学习 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);

在这里您创建了 2 个对象。首先是一个空字符串。然后是值为 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);String str2 = new String(str1); 没有区别。由于方法 copyValueOf(char[]) 只是调用构造函数 String(char[])。来自 OpenJDK 7 line 2919 :

 /**
* 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);
}

关于java - 为什么在 Java 中使用 copyValueOf 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51038181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com