Java中的按值传递
有人能解释这些问题吗Java中的按值传递,java,string,pass-by-reference,parameter-passing,Java,String,Pass By Reference,Parameter Passing,有人能解释这些问题吗 什么是字符串[]。它是字符串对象还是包含对象数组的字符串对象 changeReference()和changeValue()函数做什么和返回什么 Java支持按引用传递吗 什么是字符串[]。它是字符串对象还是包含对象数组的字符串对象 两者都不是。它是一个引用字符串数组的对象(实际上是一种类型) Chanference和changeValue函数做什么和返回什么 请自己试试看效果 Java支持按引用传递吗 不,Java总是按值传递 String[]是字符串对象的数组 chan
String[]
是字符串对象的数组changeReference
将数组的引用strings
更改为新数组的引用,在本例中,新数组包含相同的内容,但内存中的引用位于另一个位置strings
是String
s的数组。数组是我们在这里使用的对象,这意味着它们是引用类型changeReference
没有任何用处。它接收对字符串的引用,但它通过值接收该引用。在函数中重新分配strings
对传入的strings
没有影响——它只是用对新数组的引用替换引用的本地副本<另一方面,code>changeValue
修改strings
引用的数组对象。因为它是引用类型,所以变量引用同一个对象String[]
是字符串数组(字符串是一个对象)
更改了什么参考
和
changeValue
函数do和return
在changeReference()
java中,将strings
的引用更改为新的字符串数组。在changeValue()
中,java更改strings
数组的第一个元素的值
Java支持按引用传递吗
Java支持按值传递。如以下所述:
Java确实通过
引用和所有对象变量
这些都是参考资料。然而,Java没有
通过引用传递方法参数;信息技术
按值传递它们
你有没有尝试过自己用谷歌和/或Java书籍来解决这些问题?如果你愿意付出努力,这些问题的答案很容易找到。它总是通过价值传递,但价值是一个参考。请参见此处的原语按值传递,但引用对象(数组也按引用传递)只是为了澄清,Java中没有指针(如C中的指针),因此变量将其引用传递给对象;因此,将对象从
a
分配到b
,然后更改b
也将更改a
,但是将新的对象分配到b
不会更改a
@YanickRochon抱歉,这是错误的。引用(因此数组)也是按值传递的。这是一个常见的混淆,但要想知道这是真的,只需看看OP代码的结果(更具体地说,是changeReference
方法)。哦,我明白了。我也理解为什么不支持“通过引用传递”。我说的是真的。例如:String[]a=newstring[]{“foo”},b=a
然后b
指向与a
相同的对象,而inti=1,j=i代码>不是(因为它是一个基本类型),并且b[0]=“bar”
将导致a[0]
也打印“bar”,但是b=newstring[]{…}代码>根本不会更改a
。
import java.util.Arrays;
public class Test {
public static void main(String... args) {
String[] strings = new String[] { "foo", "bar" };
changeReference(strings);
System.out.println(Arrays.toString(strings)); // still [foo, bar]
changeValue(strings);
System.out.println(Arrays.toString(strings)); // [foo, foo]
}
public static void changeReference(String[] strings) {
strings = new String[] { "foo", "foo" };
}
public static void changeValue(String[] strings) {
strings[1] = "foo";
}
}