函数不更新变量

Posted

技术标签:

【中文标题】函数不更新变量【英文标题】:Function doesn't update the variable 【发布时间】:2019-05-30 08:53:52 【问题描述】:

我的函数是更新 ArrayList,但不更新布尔值,这很奇怪!

我只是不明白,或者它们都更新了,或者它们都没有。

private ArrayList<String> arrayList = new ArrayList<>();
private boolean isEmpty = true;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addNames(arrayList, isEmpty);
    Log.d("status", arrayList.size() + " " + isEmpty);



private void addNames(ArrayList<String> names, boolean empty) 
    names.add("Moshe");
    names.add("Noa");
    names.add("Haim");
    empty = false;

如何更新 isEmpty 变量? (this.isEmpty = false; 对我不好,我需要另一种方式)

【问题讨论】:

你修改了一个局部变量而不是全局变量... 【参考方案1】:

您想将该字段设置为 arg,因此应改为 empty=false

this.isEmpty = empty

因为只是设置 empty = false 会将传入的参数 'empty' 设置为 false 而不是字段

【讨论】:

【参考方案2】:

您不需要任何isEmpty 字段,您可以通过调用arrayList.isEmpty() 即时检查。

private List<String> arrayList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addNames(arrayList);
    Log.d("status", arrayList.size() + " " + arrayList.isEmpty());



private void addNames(List<String> names) 
    names.add("Moshe");
    names.add("Noa");
    names.add("Haim");

查看here了解更多信息

【讨论】:

【参考方案3】:

您使用了错误的变量。 empty 是只有方法作用域的方法参数。类范围变量是isEmpty。在这种情况下,您不需要使用this

使用isEmpty = true;

在您的场景中,您甚至不需要在该方法中传递参数。这些变量是全局的,可以在不将它们作为参数传递的情况下进行访问。当你可以使用arrayList.isEmpty()时,也不需要isEmpty

【讨论】:

以上是关于函数不更新变量的主要内容,如果未能解决你的问题,请参考以下文章

reactjs:一个不更新其变量的上下文组件函数; usestate 不能立即工作?

C++线程更新变量问题

BASH:仅当函数通过管道传输时,全局变量在函数中不可更新(简单示例)

全局变量不保存更新值

如何创建一个可重用的函数来设置变量对象属性的状态?

如何使用一个类来存储在不同函数中更新的变量,然后在不同的函数中调用这些更新的变量?