java - 在 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 的值任何字符串方法。?
解决方案
为什么会这样?
Java 是“按值传递” - 当您将参数传递给方法时,会传递该参数的值。在对象的情况下,传递的值是对该对象的引用。
这就是有趣的地方——你会认为如果你改变了字符串的内容,那么这个改变也会在方法之外看到——因为引用被传入了。如果这是其他类型的对象(像 List 一样),那是真的。
但是字符串是不可变的。当您创建一个新对象(如 中a="Hello World";
)时,您将获得一个新引用 - 现有 String 对象(具有传递给方法的引用)的内容没有更改。
我如何解决它?
可以通过从returnOriginalString
方法返回新字符串并将其分配给a
主方法来修复它:
a = returnOriginalString();
推荐阅读
- laravel - 你如何处理喜欢许多不同的模型?
- macos - 如何使用流行图形日历创建 NSDatePicker?
- matlab - 组合循环中的 k-means 簇的结果
- javascript - 是否可以一次初始化 redux 存储并在多个页面中使用?
- php - 如何在 laravel 中自定义关联数组数据
- spring - 识别是否将空列表参数传递给 Spring Boot 中的参数化 @NamedNativeQuery
- c# - 字典有什么区别
与 IEnumerable 对比 > - r - 复制具有不同值的重复行的子集?
- mysql - spring-mvc 和 hibernate 与 mysql 数据库的集成
- docker - 无法打开主脚本(权限被拒绝)