更改函数参数的值?

2022-09-02 23:21:56

这似乎是一个愚蠢的问题,但是这个函数实际上会影响变量吗(关于我将如何使用它有更大的上下文,但这基本上是我不确定的)?(我专门问java)bool

void truifier (boolean bool) {
    if (bool == false) {
        bool = true;
    }
}

答案 1

考虑一个稍微不同的示例:

public class Test {

    public static void main(String[] args) {
        boolean in = false;
        truifier(in);
        System.out.println("in is " + in);
    }

    public static void truifier (boolean bool) {
        if (bool == false) {
            bool = true;
        }
        System.out.println("bool is " + bool);
    }
}

运行此程序的输出将是:

bool is true
in is false

该变量将更改为 true,但一旦返回该方法,该参数变量就会消失(这就是人们说它“超出范围”的意思)。但是,传递给方法的变量保持不变。booltruifierintruifier


答案 2

正如另一个响应所指出的那样,当作为参数传递时,将在本地为您的truifier函数创建一个布尔值,但将按位置引用对象。因此,您可以根据所使用的参数类型获得两个截然不同的结果!

class Foo {
    boolean is = false;
}
class Test
{
    
    static void trufier(Foo b)
    {
        b.is = true;
    }
    public static void main (String[] args)
    {
        // your code goes here
        Foo bar = new Foo();
        trufier(bar);
        System.out.println(bar.is); //Output: TRUE
    }
}

但是,如果您使用的不是布尔值,而是 Object,则参数可以修改对象。此代码输出 TRUE