在JAVA中更新空字符串的值?
我有一个java类,它有两个方法,如下所示在JAVA中更新空字符串的值?,java,string,Java,String,我有一个java类,它有两个方法,如下所示 public class HelloWorld { public static void main(String[] args) { String a=null; returnOriginalString(a); System.out.println(a); a="Hello"; System.out.println(a); } priv
public class HelloWorld
{
public static void main(String[] args)
{
String a=null;
returnOriginalString(a);
System.out.println(a);
a="Hello";
System.out.println(a);
}
private static void returnOriginalString(String a)
{
a="Hello World";
}
}
当我打印上面的消息时,即使在第二个方法中更改了字符串,我仍然将字符串a设置为null。还有一件事,如果我在同一个方法中更新字符串,它将返回正确的值。我如何在不使用任何字符串方法的情况下更新a的值?为什么会发生这种情况? Java是“按值传递”——当您将参数传递给方法时,该参数的值将被传递。对于对象,传递的值是对该对象的引用 这就是它变得有趣的地方——您可能会认为,如果更改了字符串的内容,那么由于传入了引用,也会在方法之外看到更改。如果这是其他类型的对象(比如List),那就是真的 但是字符串是不可变的。当您创建一个新的引用时(如在
a=“Hello World”
中),您会得到一个新的引用-现有的字符串对象(带有传递到方法中的引用)的内容没有更改
如何修复它?
可以通过从returnOriginalString
方法返回新字符串并将其分配给主方法中的a
来修复此问题:
a = returnOriginalString();
更新方法参数值不会更新
returnString()
的String a
的值。您需要从returnOriginalString(String a)
返回一个字符串,然后将该字符串分配给a
class HelloWorld
{
public String returnString()
{
String a=null;
a=returnOriginalString();
System.out.println(a)
a="Hello"
System.out.println(a)
}
public static String returnOriginalString()
{
return "Hello World;"
}
}
这些代码甚至不应该编译,更不用说返回null了。请展示您真正的可编译和可运行代码,包括您的主方法,我们可以自己运行的代码。请注意,Java编译器是不可原谅的,您需要一定程度的OCD来编写代码(并在此网站上提问)。更新了代码。没有空字符串。只有空引用。此处没有或。不要不加区分地标记。不知道谁会投反对票,但这是正确的答案。我没有投反对票,但这只解释了一种解决方法,而不是为什么它会首先发生。@Jason我同意,没有,但你关于字符串是不可变的说法也没有。真正的原因是Java是通过引用传递的,这两位都没有说明。是我做的,我把它作为复制品关闭了,与它无关。问题是为什么
main()
中的变量字符串a
没有更新,这不是原因。如果您不同意原始答案与此无关,为什么您觉得需要更改它?你不能两全其美。字符串是不可变的这一事实与此毫无关系。这同样适用于任何对象。正如我已经说过的,a=
也是如此。这是一个赋值,它会丢失先前的a
。一成不变与此无关。我从来没有遇到过任何人认为a=
与a,set(…)
是一样的。这根本不是一个“常见的错误”,这只是你自己想出来的。