java在外部方法中更改一个Integer并使其影响原始方法

时间:2017-04-06 09:48:50

标签: java reference static-methods

我正在编写一些代码,用于练习我目前正在完成的一本书,我偶然发现了一个问题,同时将一些工作代码重写为更具可读性的代码。

问题

我有方法A,它调用方法B,传递一个int值(例如int value = 5)。我希望B查看int值,如果它是> 0,则减1(例如:int value = 4)并返回布尔值true如果int值是>但是我也希望更改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。

问题

我如何找到解决办法?

我想避免的解决方案

  1. 使用remainder
  2. 的静态变量
  3. 编写一个自定义对象,其中包含布尔值和更改后的int值"余数"
  4. 要求我实例化"测试"
  5. 的解决方案
  6. 要求我失去isRemainder0
  7. 的回报的解决方案

    1)我想避免,因为我目前正试图尽可能避免使用静态变量。 2)我想避免,因为在我看来,编码很糟糕。

3 个答案:

答案 0 :(得分:1)

制作方法以返回剩余价格,如:

private static Integer setRemainder(Integer remainder){
    if (remainder > 0) {
        remainder = remainder - 1;
    }
    return remainder;
}

在打印之前添加电话:

remainder = setRemainder(remainder);

答案 1 :(得分:0)

它也不是一个好的设计,但你可以返回一个数组:

private static Object[] isRemainder0(Integer remainder) {
    boolean is0 = true;
    if (remainder.intValue() > 0) {
        remainder = remainder.intValue() - 1;
        is0 = false;
    }
    return new Object[]{is0, remainder};
}

public static void main(String[] args) {
    Integer remainder = 5;

    System.out.println(remainder);
    Object[] result = isRemainder0(remainder);
    System.out.println(result[0]);
    remainder = (Integer)result[1];
    System.out.println(remainder);
}

正如评论中mrjink所建议的那样,您可以使用AtomicInteger。谢谢mrjink!我还学到了一些新东西:)

private static boolean isRemainder0(AtomicInteger remainder) {
    boolean is0 = true;
    if (remainder.intValue() > 0) {
        remainder.decrementAndGet();
        is0 = false;
    }
    return is0;
}

public static void main(String[] args) {
    AtomicInteger remainder = new AtomicInteger(5);

    System.out.println(remainder);
    System.out.println(isRemainder0(remainder));
    System.out.println(remainder);
}

答案 2 :(得分:-1)

这是我提出的解决方案:

public class JavaApplication1 {
static int remainder = 0;
public static void setRemainder(int value){
    remainder = value;
}
private static boolean isRemainder0() {
    boolean is0 = true;
    if (remainder > 0) {
        remainder = remainder - 1;
        is0 = false;
    }
    return is0;
}

public static void main(String[] args) {
    setRemainder(5);

    System.out.println(remainder);
    System.out.println(isRemainder0());
    System.out.println(remainder);
}

}

解决方案是您想要看到的: 五 假 4