gpt4 book ai didi

java - java - 如何从另一个方法增加一个类整数引用Java中的值

转载 作者:IT老高 更新时间:2023-10-28 21:17:04 27 4
gpt4 key购买 nike

package myintergertest;

/**
*
* @author Engineering
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//this one does not increment
Integer n = new Integer(0);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);

//this one will increment
MyIntegerObj myInt = new MyIntegerObj(1);
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());

}

public static void Increment(Integer n) {
//NO. this doesn't work because a new reference is being assigned
//and references are passed by value in java
n++;
}

public static void Increment(MyIntegerObj n) {
//this works because we're still operating on the same object
//no new reference was assigned to n here.
n.plusplus(); //I didn't know how to implement a ++ operator...
}
}

所有这些的结果都是 n=0。整数 n 是一个对象,因此通过引用传递,那么为什么增量没有反射(reflect)在调用方方法(main)中?我预计输出为 n=0 n=1 n=2 等...

更新:请注意,我更新了上面的代码示例。如果我理解正确,Jon Skeet 回答了为什么 myInt 会增加而 n 不会增加的问题。这是因为 n 正在获取 Increment 方法中分配的新引用。但是 myInt 没有被分配一个新的引用,因为它正在调用一个成员函数。

这听起来像我理解正确吗?

最佳答案

不,对象不是通过引用传递的。引用是按值传递的——有很大的不同。 Integer 是不可变类型,因此不能在方法中更改值。

你的 n++; 语句是有效的

n = Integer.valueOf(n.intValue() + 1);

因此,这会为 Increment 中的变量 n 分配不同的值 - 但由于 Java only 具有按值传递,因此不影响调用方法中n的值。

编辑:回答您的更新:没错。大概您的“MyIntegerObj”类型是可变的,并且在您调用 plusplus() 时会更改其内部状态。哦,别费心去寻找如何实现一个操作符——Java 不支持用户定义的操作符。

关于java - java - 如何从另一个方法增加一个类整数引用Java中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208943/

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