gpt4 book ai didi

java - 引用变量的更新

转载 作者:行者123 更新时间:2023-12-01 22:31:07 26 4
gpt4 key购买 nike

我想问一下,两个例子的区别在哪里:

class PassA 
{
public static void main(String [] args)
{
PassA p = new PassA();
p.start();
}

void start()
{
long [] a1 = {3,4,5};
long [] a2 = fix(a1);
System.out.print(a1[0] + a1[1] + a1[2] + " ");
System.out.println(a2[0] + a2[1] + a2[2]);
}

long [] fix(long [] a3)
{
a3[1] = 7;
return a3;
}
}

在上面的代码中:

  1. 引用变量a1和a3引用同一个长数组目的。当在fix()方法中更新[1]元素时,它是更新 a1 引用的数组。引用变量a2引用同一个数组对象。所以输出:3+7+5+""3+7+5

但是在下面的代码中

class Test 
{
public static void main(String [] args)
{
Test p = new Test();
p.start();
}

void start()
{
boolean b1 = false;
boolean b2 = fix(b1);
System.out.println(b1 + " " + b2);
}

boolean fix(boolean b3)
{
b3 = true;
return b3;
}
}
  • fix() 方法中的 boolean 值 b1 与start() 方法中的 b1。 start()方法中的b1不是通过fix()方法更新。
  • 问题

    有什么区别?如何更改代码(示例 1)以使 a1 不会更改?

    最佳答案

    图纸

    a1 => Long object ID 9999: [3, 4, 5]
    a3 => Long object ID 9999: [3, 4, 5] (ie. same object)

    然后你就可以了

    a3[1] = 7;

    我们取消引用a3并得到

    Long object ID 9999: [primitive long value: 3, primitive long value: 4, primitive long value: 5] 

    然后我们访问索引 1 处的元素并将其值更改为 7

    Long object ID 9999: [primitive long value: 3, primitive long value: 7, primitive long value: 5] 

    第二种情况

    b1 = primitive boolean value: false
    b3 = primitive boolean value: false (no relation to the other, just another false)

    然后你就可以了

    b3 = true;

    这仅改变b3

    b3 = primitive boolean value: true (still no relation)

    这是因为Java is a pass-by-value language .

    要更改第一个代码片段,您必须复制该数组并在调用该方法时传递该副本。

    关于java - 引用变量的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732131/

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