首页 > 解决方案 > 在 JAVA 中更新空字符串的值?

问题描述

嗨有一个具有以下两种方法的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);
    }

    private static void returnOriginalString(String a)
    {
        a="Hello World";
    }


}

当我打印上述消息时,即使在第二种方法中更改了字符串后,我仍然将 String a 设为 null。还有一件事,如果我以相同的方法更新字符串,它会返回正确的值。如何在不使用的情况下更新 a 的值任何字符串方法。?

标签: javastring

解决方案


为什么会这样?

Java 是“按值传递” - 当您将参数传递给方法时,会传递该参数的值。在对象的情况下,传递的值是对该对象的引用。

这就是有趣的地方——你会认为如果你改变了字符串的内容,那么这个改变也会在方法之外看到——因为引用被传入了。如果这是其他类型的对象(像 List 一样),那是真的。

但是字符串是不可变的。当您创建一个新对象(如 中a="Hello World";)时,您将获得一个新引用 - 现有 String 对象(具有传递给方法的引用)的内容没有更改。

我如何解决它?

可以通过从returnOriginalString方法返回新字符串并将其分配给a主方法来修复它:

a = returnOriginalString();

推荐阅读