Java, устанавливающая переменную - PullRequest
0 голосов
/ 12 марта 2012

У меня возникли проблемы с кодом ниже. Моя проблема в том, что переменная BGCLRFORPNLS не принимает то же значение, что и переменная c. Но это должно работать, потому что эта переменная является ссылкой.

public static Color BGCLRFORPNLS = Color.BLACK;
private static void Initialze() {
    List<Color> colors = new ArrayList<Color>();

    colors.add(BGCLRFORPNLS);
    Color c = colors.get(0);

    JOptionPane.showMessageDialog(null, "hashcode of c: "+ c.hashCode());
    JOptionPane.showMessageDialog(null, "hashcode of BGCLRFORPNLS: "+ BGCLRFORPNLS.hashCode());

    c = Color.red;

    JOptionPane.showMessageDialog(null, "color of c: "+ c.toString());
    JOptionPane.showMessageDialog(null, "color of BGCLRFORPNLS: "+ BGCLRFORPNLS.toString());
}

Ответы [ 2 ]

4 голосов
/ 12 марта 2012

Нет, это не должно работать, так как c является ссылкой на объект Color, когда вы изменяете его, вы не изменяете никакую другую ссылку на объект и не изменяете значениеобъект, но только конкретная ссылка.

statement                   |  BGCLRFORPNLS |     colors[0]     |     c
---------------------------------------------------------------------------------
BGCLRFORPNLS = Color.BLACK; |  Color.BLACK  |     ----          |      ------
colors.add(BGCLRFORPNLS);   |  Color.BLACK  |    Color.BLACK    |      ------
Color c = colors.get(0);    |  Color.BLACK  |    Color.BLACK    |   Color.BLACK
c = Color.red;              |  Color.BLACK  |    Color.BLACK    |   Color.red
1 голос
/ 12 марта 2012

Вы просто изменяете ссылку, т. Е. У вас есть ссылка c на объект Red. Это не имеет абсолютно никаких побочных эффектов на объект, на который вы ранее ссылались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...