如何解决关于将值传递给方法的困惑?
我真的很困惑如何将值传递给函数。当我们将其传递给函数时,我无法弄清楚哪些类型的值会发生变化。
示例 1 - 将字符串(引用类型)传递给函数 -
public static String word = new String("Hello World");
public static void main(String[] args)
{
System.out.println("Before: " + word);
UpdateValue(word);
System.out.println("After: " + word);
}
public static void UpdateValue(String x)
{
x = "Hi World";
}
输出:
Before: Hello World
After: Hello World
示例 2 - 将 String[] 数组传递给函数 -
public static String[] words = new String[] {"Hello","Everyone"};
public static void main(String[] args)
{
System.out.println("Before: " + Arrays.toString(words));
UpdateValue(words);
System.out.println("After: " + Arrays.toString(words));
}
public static void UpdateValue(String[] x)
{
x[0] = "Hi";
}
输出:
Before: [Hello,Everyone]
After: [Hi,Everyone]
我的问题 -
- 这一切是如何运作的?
String
是引用类型,所以我的 先前的假设是,如果我们通过它,该值将会改变 到一个函数。但这并没有发生。 值没有改变。 - 同时,当我传递数组(在Java中是一个对象,所以基本上是一个引用 类型?)我们看到原始值发生了变化?
解决方法
两者都作为参考传递。方法中的局部变量(最初)指向与调用者 (main) 相同的对象。
这是发生了什么。
字符串是不可变的。当您在方法中重新分配 String 时,会创建一个新对象,并且本地引用会更新为指向新对象。原始对象仍然存在,main 中的引用仍然指向它。
我是第二个例子,以同样的方式复制对数组的引用。本地引用指向与 main 中相同的数组。但是这次数组引用没有更新。相反,数组中的一个字符串引用被更新为指向一个新的字符串对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。