【发布时间】:2017-04-06 09:48:50
【问题描述】:
我正在编写一些代码来练习我目前正在自己完成的一本书,我在将一些工作代码重写为更易读的东西时偶然发现了一个问题。
问题
我有方法 A,它调用方法 B,传递给它一个 int 值(例如 int value = 5)。我希望 B 查看 int 值,如果它 > 0,则将其减 1(例如:int value = 4),如果 int 值 > 0,则返回布尔值true。但是我也想要更改B 中的 int 值会影响 A 中的原始 int 值。由于这在带有原语的 java 中不起作用,我认为如果我通过 Integer,我的问题将在这里解决。
示例代码
public class Test {
private static boolean isRemainder0(Integer remainder) {
boolean is0 = true;
if (remainder.intValue() > 0) {
remainder = remainder.intValue() - 1;
is0 = false;
}
return is0;
}
public static void main(String[] args) {
Integer remainder = 5;
System.out.println(remainder);
System.out.println(isRemainder0(remainder));
System.out.println(remainder);
}
}
我想要的是返回 5 - false - 4。返回的是什么:
5
false
5
为什么这不起作用
显然,如果您传递一个包含对象引用的变量 var1,则您不会传递 var1,而是将 var2 == var1 的副本传递给新方法。因此,新方法中对 var2 的更改不会影响 var1。
问题
如何找到解决方法?
我想避免的解决方案
- 为
remainder使用静态变量 - 编写一个自定义对象,其中包含布尔值和“remainder”的已更改 int 值
- 需要我实例化“测试”的解决方案
- 要求我失去 isRemainder0 回报的解决方案
1) 我想避免,因为我目前正在尽可能避免使用静态变量。 2)我想避免,因为在我看来这像是糟糕的编码。
【问题讨论】:
-
要么使其成为成员变量,要么让方法返回一个 int 并将余数重新分配给返回的值
-
@XtremeBaumer 解决方案 1 将强制我实例化对象,解决方案 2 将意味着我将失去布尔值的返回(这与我正在编写的使用“ isRemainder0")。
-
那么你应该在你的问题中准确地说出来
-
使用 AtomicInteger 代替。
-
Java 是 Pass-By-Value。你必须想办法解决这个问题。顺便提一句。有一个名为 isRemainder0 的方法修改传递的值也不是很好的编码风格。
标签: java reference static-methods