微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于将值传递给方法的困惑?

如何解决关于将值传递给方法的困惑?

我真的很困惑如何将值传递给函数。当我们将其传递给函数时,我无法弄清楚哪些类型的值会发生变化。

示例 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 举报,一经查实,本站将立刻删除。