gpt4 book ai didi

java - 为什么Java中函数修改数组[0]而不修改字符串?

转载 作者:行者123 更新时间:2023-12-01 21:28:18 34 4
gpt4 key购买 nike

代码

public class Foo {

public static void main(String[] args) {

//declaring and initializing String variable 'str' with value "outside"
String str = "main";

//declaring and initializing Array 'array' with values
String [] array = {"main"};

//printing values of str and array[0]
System.out.println("str : " + str + " , array[0] : " + array[0]);

//calling function foo()
foo(str, array);

//printing values after calling function foo()
System.out.println("str : " + str + " , array[0] : " + array[0]);
}

static void foo(String str, String[] array){
str = "foo";
array[0] = "foo";
}

}

输出

str : main , array[0] : main  
str : main , array[0] : foo

问题

为什么字符串 str与“main”相同,但 array[0] 的值调用函数 foo() 后从“main”修改为“foo” ?效果不应该是一样的吗?

最佳答案

不,不应该,因为 Java 处理引用的方式。

您为方法提供了两个参数:一个字符串(即字符串的地址)和一个数组(即数组的地址)。这些地址本地存储在str中和array ,如果更改地址,方法外部的地址( strarraymain() )不会改变。

然后创建一个字符串“foo”并将其(或者更确切地说,它的地址)分配给本地 str 。这不会对 main() 的 str 产生任何影响。然而,数组地址是本地的,但数组内部的内容却不是。所以如果你写

array = {"foo"};

这不会影响arraymain() ,但与

array[0] = "foo";

您更改了作为引用的数组内的某些内容。

关于java - 为什么Java中函数修改数组[0]而不修改字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37753356/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com