java用引用传递数组_java数组按引用传递不起作用?

本问题已经有最佳答案,请猛点这里访问。

伙计们,我认为几乎所有的语言,包括Java PASS数组都可以作为参考(可修改的)

但不知何故,它在这里不起作用。测试数组仍然是1,2,3,大小为3

奇怪的是,当我把结果[i]=2改为[1]=2时,它就起作用了。它确实通过了引用

这个代码有什么问题?

最后,我得到了一个=结果(更新了a)。结果是否从堆栈中移除?这就是为什么A仍然可以得到原来的A?

我很困惑。

谢谢

class Test

{

public static void main(String[] args)

{

int[] testArray = {1,2,3};

equalize(testArray, 6);

System.out.println("test Array size :" + testArray.length);

for(int i = 0; i < testArray.length; i++)

System.out.println(testArray[i]);

}

public static void equalize(int[] a, int biggerSize)

{

if(a.length > biggerSize)

throw new Error("Array size bigger than biggerSize");

int[] result = new int[biggerSize];

// System.arraycopy(a, 0, result, 0, a.length);

// int array default value should be 0

for(int i = 0; i < biggerSize; i++)

result[i] = 2;

a = result;

}

}

请详细解释你的逻辑。是否尝试扩展数组大小?当前,结果数组不从原始数组复制任何值。

你见过"StasObjult.com /Quase/40480/Java引用"和"ZWNJ"吗?

数组是按引用传递的,但引用是按值传递的。也就是说,可以更改a所指的数组,但不能更改a所指的数组。

Java是按值传递的。这就是代码不起作用的原因。一个好的做法是将int[] a标记为final,这样会导致编译错误(参见相应的checkstyle规则)。

从函数返回参数"a",并在主函数中分配给testerray。当通过引用传递对象时,将复制引用并将其提供给函数。因此对象现在由2个引用引用引用。通过第二个引用对对象所做的任何更改都将反映在第一个引用中,因为这两个引用引用的对象相同。但是,当您更改引用(不是通过引用来更改对象)时,情况就不同了。您已更改第二个引用以指向另一个对象(int[]result)。因此,通过第二个引用所做的任何更改都只会更改"result"对象。

class Test

{

public static void main(String[] args)

{

int[] testArray = {1,2,3};

testArray = equalize(testArray, 6);

System.out.println("test Array size :" + testArray.length);

for(int i = 0; i < testArray.length; i++)

System.out.println(testArray[i]);

}

public static int[] equalize(int[] a, int biggerSize)

{

if(a.length > biggerSize)

throw new Error("Array size bigger than biggerSize");

int[] result = new int[biggerSize];

// System.arraycopy(a, 0, result, 0, a.length);

// int array default value should be 0

for(int i = 0; i < biggerSize; i++)

result[i] = 2;

a = result;

return a;

}

}

有没有可能有空虚(或者什么都没有退回)?谢谢

新数组在函数内部创建。所以应该归还。-推荐方法。还有一些其他方法,比如在外部初始化结果数组并将其作为第三个参数传递,或者将第三个参数定义为哈希映射并将结果数组放入其中。

当您执行a=result;object a dosnt时,再指向testerray,bc您将更改其对result地址的引用。这就是为什么它不再影响测试阵列的原因。事实上,你所做的就是你在做一个和结果一样的反应,所以无论你在结果中做了什么改变,结果也会改变。

希望这有帮助…

可以修改a引用的数组,但引用本身是按值传递的。因此,如果您执行a[0] = 1,那么您将更改原始数组。但是,a = result更改了引用,因此原始引用不变。

嗯,有实现我的功能的想法吗?基本上我想把数组的大小从3调整到6:(

Java总是通过值。

我在找的答案

public class test

{

public static void main(String[] args){

int[] a = {15, 2, -3};

printArray(a);

changeArray(a);

printArray(a);

}

private static void changeArray(int[] a){

for(int i = 0; i < a.length; i++){

a[i]++;

}

}

private static void printArray(int[] a){

for(int i = 0; i < a.length; i++){

System.out.print(a[i] +"");

}

System.out.println();

}

}

-----输出-----

15 2—3

16 3—2

如果解释和代码搭配总是很好的话。

数组是Java中的对象。如果已使用大小(实际长度)初始化数组,则无法修改它。您可以创建一个大小不同的新数组(正如您当前在函数中所做的那样),并将旧数组中的所有值复制到新数组中。在您的案例中,您有2个对象和3个引用。如果要在调用函数中访问更大的数组,请使函数返回更大数组的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值