Java:为什么更改局部变量会影响全局变量原始副本?

雷尔姆

我试图分配全局变量的数据并更改局部变量的数据,但是当我更改局部变量的结构时,全局变量也会随之更改。

private void remove(Message M) {
      int           p = list.lastIndexOf(M);
      List<Message> x = list;
      list.remove(p);
      indexedMessages.remove(M.getMessageid());
      notifyItemRemoved(p);
      notifyItemRangeChanged(p, list.size());

// Removing the following items from "x" also causes the elements to be removed from recycleView.
      x.remove(0);
      x.remove(x.size() - 1);
}

我不明白的两件事:

  1. 为什么“ x”影响“列表”
  2. 以及为什么再次触发“ notifyItemRemoved”。

无论如何,在原始的“列表”(私有列表列表)上,第一项和最后一项只是占位符。从此列表中删除一个项目时,我想存储该列表的新副本,但不使用占位符。

每次创建适配器时都会添加占位符。

Chris Gong

在创建局部变量之前x

完成局部变量后x

从中删除元素后x

因为变量x是指针/参考类型的对象List<Message>称为list因此,由于更改和更改均指向同一个对象,因此x将同时应用更改list

如果要在x不影响全局变量的情况下进行更改,则必须x指向一个新对象,然后将全局变量的所有内容复制到中x请注意,这可能是多余的。例如,这将起作用,

List<Message> x = new ArrayList<Message>();
//modify x here

由于注释中指出的原因,这是多余的,因为

  • 方法完成后,局部变量将丢失
  • List<Message> x = ArrayList<Message>() can be rewritten as List<Message> x = ArrayList<>() since the object type can be inferred from List<Message> so there's no need to restate it

Also if we have :

List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");

We can copy "a"'s contents into "b" as follows.

List<String> b = new ArrayList<>(a);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么更改局部变量值会影响全局副本

来自分类Dev

Javascript - 在已声明的全局变量中分配新值后定义局部变量会覆盖全局变量。为什么?

来自分类Dev

Python - 将局部变量更改为全局变量

来自分类Dev

如何使用局部变量更改全局变量

来自分类Dev

为什么局部变量会自动更改

来自分类Dev

为什么局部变量不会在数组定义中隐藏全局变量

来自分类Dev

为什么在此函数中全局变量与局部变量不同?

来自分类Dev

为什么递归中的全局变量比局部变量使用更多的内存?

来自分类Dev

为什么此函数作为全局变量而不是局部变量运行?

来自分类Dev

为什么在全局变量中转换局部变量时会出现NameError?

来自分类Dev

为什么在有局部变量的情况下调用全局变量?

来自分类Dev

Java中的局部变量与全局变量同名

来自分类Dev

在Java中将局部变量转换为全局变量

来自分类Dev

局部变量和全局变量

来自分类Dev

Kotlin - 局部变量与全局变量

来自分类Dev

将函数变量声明为局部变量而不是全局变量是否影响效率?

来自分类Java

为什么局部变量会影响类型推断相等约束?

来自分类Dev

为什么根据Lua中的模块,将模块加载到局部变量或全局变量意味着结果不同?

来自分类Dev

为什么局部变量不具有默认类型而全局变量具有C?

来自分类Dev

为什么我的JavaScript提升的局部变量返回未定义,而提升的全局变量返回空白?

来自分类Dev

为什么全局变量没有在没有将其重新声明为局部变量的函数内更新?

来自分类Dev

为什么即使稍后在代码中定义了局部变量,全局变量也无法访问

来自分类Dev

局部函数变量更改不会影响全局范围内的变量。为什么不?

来自分类Dev

为什么在`while`循环中用`read variable`设置变量时是全局变量,而当用`while read variable`设置变量时为什么是局部变量?

来自分类Dev

什么时候是局部变量,什么时候是全局变量?

来自分类Dev

为什么作为值的局部变量的类型会影响函数类型签名中输入变量的类型?

来自分类Dev

将局部变量更改为全局变量不起作用

来自分类Dev

如何更改与 Rebol 或 Red 中的局部变量同名的全局变量?

来自分类Dev

从主作用域更改函数中的局部变量,而无需使用全局变量

Related 相关文章

  1. 1

    为什么更改局部变量值会影响全局副本

  2. 2

    Javascript - 在已声明的全局变量中分配新值后定义局部变量会覆盖全局变量。为什么?

  3. 3

    Python - 将局部变量更改为全局变量

  4. 4

    如何使用局部变量更改全局变量

  5. 5

    为什么局部变量会自动更改

  6. 6

    为什么局部变量不会在数组定义中隐藏全局变量

  7. 7

    为什么在此函数中全局变量与局部变量不同?

  8. 8

    为什么递归中的全局变量比局部变量使用更多的内存?

  9. 9

    为什么此函数作为全局变量而不是局部变量运行?

  10. 10

    为什么在全局变量中转换局部变量时会出现NameError?

  11. 11

    为什么在有局部变量的情况下调用全局变量?

  12. 12

    Java中的局部变量与全局变量同名

  13. 13

    在Java中将局部变量转换为全局变量

  14. 14

    局部变量和全局变量

  15. 15

    Kotlin - 局部变量与全局变量

  16. 16

    将函数变量声明为局部变量而不是全局变量是否影响效率?

  17. 17

    为什么局部变量会影响类型推断相等约束?

  18. 18

    为什么根据Lua中的模块,将模块加载到局部变量或全局变量意味着结果不同?

  19. 19

    为什么局部变量不具有默认类型而全局变量具有C?

  20. 20

    为什么我的JavaScript提升的局部变量返回未定义,而提升的全局变量返回空白?

  21. 21

    为什么全局变量没有在没有将其重新声明为局部变量的函数内更新?

  22. 22

    为什么即使稍后在代码中定义了局部变量,全局变量也无法访问

  23. 23

    局部函数变量更改不会影响全局范围内的变量。为什么不?

  24. 24

    为什么在`while`循环中用`read variable`设置变量时是全局变量,而当用`while read variable`设置变量时为什么是局部变量?

  25. 25

    什么时候是局部变量,什么时候是全局变量?

  26. 26

    为什么作为值的局部变量的类型会影响函数类型签名中输入变量的类型?

  27. 27

    将局部变量更改为全局变量不起作用

  28. 28

    如何更改与 Rebol 或 Red 中的局部变量同名的全局变量?

  29. 29

    从主作用域更改函数中的局部变量,而无需使用全局变量

热门标签

归档