gpt4 book ai didi

java - 让方法修改引用而不是新对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:10:02 25 4
gpt4 key购买 nike

我敢打赌这个问题已经有人回答了,但我不知道如何用简单的词来解释这个问题,以便在谷歌上找到一个简单的答案 - 对不起!

这是我的测试代码:

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/

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