如何同步全局变量Java

时间:2015-07-04 15:06:37

标签: android global-variables synchronize

String compBut1 = "D0", compBut2 = "D0", compBut3 = "D0", playaBut1 = "D0", playaBut2 = "D0", playaBut3 = "D0";  

public void changeOver()
{
    String[] set = {playaBut2, playaBut3, playaBut1};
    int butPos = Arrays.asList(set).indexOf(positions[posOld]);
    set[butPos] = positions[posNew];
}

我必须做些什么才能确保每当数组中的变量值发生变化时,全局变量也会发生变化。我可以在调试器中看到,当我在方法内部时,值会被更改,但是一旦我出去,更改就会被丢弃。

1 个答案:

答案 0 :(得分:1)

String[] set = {playaBut2, playaBut3, playaBut1};

您认为上面存储了对相应字符串的引用,以便每当更改任何这些字符串时,引用的字符串都会更改。

然而,它实际上做的是将值复制到String的新实例并创建它们的数组。出于安全原因,Java不允许您存储引用(指向C / C ++)。

你应该做的是:创建一个全局声明的字符串数组,并在函数内直接更改它们。

String[] compBut={"D0","D0","D0"};
String[] playaBut={"D0","D0","D0"};

public void changeOver(){
  int butPos = Arrays.asList(playaBut).indexOf(positions[posOld]);
  playaBut[butPos] = positions[posNew];
}