更改作为方法参数发送的数组
假设我有一个intrall,我想改变它。 我知道我无法分配作为参数发送的新阵列数组:
虽然我可以修改它:
然后我尝试使用作为参数发送的数组阵列
:
现在我想知道他为什么打印 1 在最后一个示例中,我只需复制一个数组
, 只需复制值,而不是链接。 你能向我解释一下吗?
EDIT:
有没有方法可以在不改变链接的情况下将数组复制到对象中? 我的意思是制定打印的最后一个例子
.
public static void main/String[] args/
{
int[] temp_array = {1};
method/temp_array/;
System.out.println/temp_array[0]/; // prints 1
}
public static void method/int[] n/
{
n = new int[]{2};
}
虽然我可以修改它:
public static void main/String[] args/
{
int[] temp_array = {1};
method/temp_array/;
System.out.println/temp_array[0]/; // prints 2
}
public static void method/int[] n/
{
n[0] = 2;
}
然后我尝试使用作为参数发送的数组阵列
clone//
:
public static void main/String[] args/
{
int[] temp_array = {1};
method/temp_array/;
System.out.println/temp_array[0]/; // prints 1 ?!
}
public static void method/int[] n/
{
int[] temp = new int[]{2};
n = temp.clone//;
}
现在我想知道他为什么打印 1 在最后一个示例中,我只需复制一个数组
clone//
, 只需复制值,而不是链接。 你能向我解释一下吗?
EDIT:
有没有方法可以在不改变链接的情况下将数组复制到对象中? 我的意思是制定打印的最后一个例子
2
.
没有找到相关结果
已邀请:
4 个回复
风见雨下
赞同来自:
public static void method/int[] n/
- 它是以这种方式传输的数组的另一个名称。 它在内存中指向同一个地方,作为一个数组的原始位置 ints. 如果更改存储在此阵列中的一个值,则指示它将看到此更改的所有名称。
但是,在方法本身
您创建一个新数组,然后说: "姓名 'n' 现在表示此,另一个数组,而不是传输的那个". 实质上,名称 'n' 不再是传输的数组的名称。
快网
赞同来自:
/这是对由值传输的数组的引用/.
你克隆了一个数组的事实
, 无关紧要 - 他所做的一切,它创造了一份副本
, 然后处方了
.
要将值复制到传输到您的方法的数组中
, 你可以看:
http://download.oracle.com/jav ... bject,%20int,%20java.lang.Object,%20int,%20int%29
当然,这一切都取决于阵列的大小
以及您在方法内创建的那个
.
假设它们都具有相同的长度,例如,您会这样做:
快网
赞同来自:
这是你能做的最好的事情:
当然,只有当输入数组的大小与您复制到它的数组的大小重合时,它才能正确工作。 /您如何应对这一点,取决于具体应用程序 .../
用于录音 Java 通过值传输对数组的引用。 它不会按值传输数组的内容。 克隆不会有助于解决这个问题。 /至少不是宣布的签名方法。/
知食
赞同来自:
你分配的一无所有
, 永远不要更改传输和指定的对象的值
. 在一开始
,
表示阵列。 当你分配时
等于另一个数组,您只需重新指示哪个数组指示
, 并且不要改变任何事情
从方法中
.