我敢打赌这个问题已经有人回答了,但我不知道如何用简单的词来解释这个问题,以便在谷歌上找到一个简单的答案 - 对不起!
这是我的测试代码:
public class test {
public static void increase(Integer i){
i++;
}
public static void main(String[] args){
Integer x = new Integer(10);
increase(x);
System.out.println(x);
}
我有一个整数 x 并想通过无效方法“increase(..)”修改它。 由于 Integer 是一个对象,x 是指向该对象的指针。 我想要“increase(..)”来修改 Integer 本身,所以“i”指的是与“x”相同的对象。但是,如果我查看 print(x)(即“10”),我假设该方法创建了一个内容为“x”的新整数。
我希望有人能理解我...
我需要它做什么?
我正在尝试使用多个线程对从 1 到“n”的数字求和。 我创建了一个类“MyThread”,它获取一个 lowerLimit 和一个 upperLimit 来总结间隔,以及一个“结果”(但作为引用 - 不是新对象),其中添加了间隔的数字。
最好的问候 Tak3r07
最佳答案
可以通过三种方式做到这一点。
public class test {
public static void increase(AtomicInteger i){
i.getAndIncrement()
}
public static void main(String[] args){
AtomicInteger x = new AtomicInteger(10);
increase(x);
System.out.println(x);
}
}
或
public class test {
public static void increase(int[] i){
i[0]++;
}
public static void main(String[] args){
int[] x = { 10 };
increase(x);
System.out.println(x[0]);
}
}
或整数
public class test {
public static void increase(Integer[] i){
i[0]++;
}
public static void main(String[] args){
Integer[] x = { 10 };
increase(x);
System.out.println(x[0]);
}
}
Out of interest, can you explain why this works? I thought java was strictly pass by value?
Java 是按值传递的。引用按值传递,但这是浅拷贝而不是深拷贝。也就是说,您不能更改引用,但可以更改引用的对象。
您不能直接使用 Integer
执行此操作,因为它是不可变的,因此您无法更改任何内容。传递对可变对象的引用,您可以更改它。
关于java - 让方法修改引用而不是新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24971453/