【发布时间】:2021-04-13 22:37:23
【问题描述】:
我真的很困惑如何将值传递给函数。当我们将值传递给函数时,我无法弄清楚哪些类型的值会发生变化。
示例 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中是一个对象,所以基本上是一个引用 type?) 我们看到原来的值改变了?
【问题讨论】:
-
在 Java 中对象是按值传递的,但值是对对象的引用(数组也是对象),在示例 1 中,您正在分配一个 不同 的引用对象到参数,所以给定它是按值传递的,调用者不会更新。在示例 2 中,您正在更新数组 inside 的引用,因此调用者可以看到更改,因为它是它传入的 same 数组。顺便说一句:使用 @ 987654326@ 是不必要且浪费的,被认为是一种不好的做法。
标签: java pass-by-reference pass-by-value