gpt4 book ai didi

java - 别名和 Java

转载 作者:行者123 更新时间:2023-12-03 13:37:05 25 4
gpt4 key购买 nike

我正在努力想象为什么这段代码会返回它返回的内容。

public class IntObject
{
private int myInt;

public IntObject() { myInt = 0; }
public IntObject(int n) { myInt = n; }
public void increment() { myInt++; }
}

驱动文件

public class IntObjectTest
{
public static IntObject someMethod(IntObject obj) {
IntObject ans = obj;
ans.increment();
return ans;
}


public static void main(String[] args) {
IntObject x = new IntObject(2);
IntObject y = new IntObject(7);
IntObject a = y;
x = someMethod(y);
a = someMethod(x);}

在我的脑海里,程序正在运行一个是yx 是 y + 1 或 a + 1,在本例中是 8a 是 x(8) + 1。所以它是 9

当程序结束时,我认为它们的值是

x = 8

y = 9

一=9

但正确的值都是 9。我想我在使用别名时遇到了麻烦。谁能帮我解释一下别名以及它们如何在此代码中工作?

最佳答案

那些不是别名,它们是引用

IntObject x = new IntObject(2); // <-- 2
IntObject y = new IntObject(7); // <-- 7
IntObject a = y; // <-- 7
x = someMethod(y); // <-- 8
a = someMethod(x); // <-- 9.

当你调用someMethod时,

IntObject ans = obj; // ans points to obj.
ans.increment(); // same as obj.increment();
return ans;

我想你已经预料到了

IntObject ans = obj.clone(); // ans points to a copy of obj.
ans.increment(); // now it won't modify obj.
return ans;

关于java - 别名和 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27428563/

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