2014-09-24 5 views
0

Я смущен. Я попытался с помощьюФинальная строка [] и финальная строка

final String usr; 

и пытается изменить его значение никогда не работал, но когда я использовал массив final String[] usr = {"", ""};, он работал. Я даже к нему доступ из этого

sgnup.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     user[0] = sUsr.getText(); 
     } 
}); 

Я нахожу это очень запутанным, поскольку мое понимание final является то, что переменная, объявленная с final и добавить значение к этому, значение не меняется. Но почему массив с final работает? Я даже могу установить текст в один из этих массивов.

+0

http://stackoverflow.com/questions/15655012/how-final-keyword-works –

+0

Массивы никогда не могут быть неизменными на Java. – Tom

+0

На ваш вопрос ответили здесь: http://stackoverflow.com/questions/10339930/final-array-in-java – Eypros

ответ

1

Да, потому что вы не меняете ссылку usr, но что она содержит. final блокирует вас от выполнения чего-то вроде usr = new String[5]; (измените usr на другой массив), но содержимое массива можно без проблем изменить.

final String[] a = new String[5]; 
a = new String[3]; // illegal 

final String[] a = new String[5]; 
a[0] = "Hello"; // legal, i don't change a but what is inside a[0] 
0

В Java, переменная любого типа объекта (в том числе любого массива) на самом деле является ссылка на объект, а не сам объект. Когда вы объявляете переменную final, это означает, что ссылка не изменится, а это означает, что объект, который он ссылается, всегда будет одним и тем же объектом. Однако, если внутреннее состояние объекта может измениться без модификатора final, то добавление final не будет препятствовать изменению внутреннего состояния объекта, на который делается ссылка. В частности, для массива final, ссылка на массив не может быть переназначена, но элементы массива могут по-прежнему меняться.

В вашей ситуации вы можете избежать использования массива, просто исключив модификатор final из переменной String.

Смежные вопросы