首页 > 解决方案 > 如何调用一个方法两次但返回不同的变量

问题描述

我试图在 main 中调用一个方法两次:

    System.out.println(switchBool(b));
    System.out.println(switchBool(b));

这是我做的方法:

    public static boolean switchBool(boolean b){
    b=true;
    if(b==true){
        b = false;
    }
    b=false;
    if(b==false){
        b=true;
    }
    return b;

第一次调用它应该返回“false”,第二次调用它应该返回“true”,但对于我的输出,我不断得到:

    true
    true

有什么我做错了吗?我是java的初学者。

标签: javamethods

解决方案


布尔值b是一个局部变量并且存在于堆栈中。因此,当方法switchBool返回时它会丢失。

你有两个选择来解决它。您可以创建b一个静态变量,也可以创建b一个实例变量并switchBool转换为实例方法。

我会推荐一个实例变量。

public class BooleanToggle {

    private boolean value;

    public boolean toggle(){
        value = !value;
        return value;
    }

    // I put the main method here for simplicity. Usually it is put somewhere else.
    public static void main(String[] args) {
        BooleanToggle booleanToggle = new BooleanToggle();

        System.out.println(booleanToggle.toggle());
        System.out.println(booleanToggle.toggle());
    }
}

结果将是

  true
  false

我们b从堆栈移动到堆,这样它就可以在方法调用中存活下来。


推荐阅读