Java 最终字符串[]和最终字符串
我很困惑。我试着用Java 最终字符串[]和最终字符串,java,arrays,jframe,actionlistener,final,Java,Arrays,Jframe,Actionlistener,Final,我很困惑。我试着用 final String usr; 试图改变它的值从来都不起作用,但当我使用数组final String[]usr={“”“”},成功了。我甚至从这个网站上访问了它 sgnup.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ user[0] = sUsr.getText(); } }); 我发现它非常混乱,因为我
final String usr;
试图改变它的值从来都不起作用,但当我使用数组final String[]usr={“”“”}代码>,成功了。我甚至从这个网站上访问了它
sgnup.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
user[0] = sUsr.getText();
}
});
我发现它非常混乱,因为我对final
的理解是,用final
声明变量并向其添加一个值,该值永远不会更改。但是为什么带有final
的数组可以工作呢?我甚至可以将文本设置为其中一个数组。是的,因为您不会更改usr
的引用,而是更改它包含的内容final
阻止您执行类似于usr=newstring[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]
在Java中,任何对象类型(包括任何数组)的变量实际上都是对对象的引用,而不是对象本身。当您将变量声明为final
时,这意味着引用不会更改,这意味着它引用的对象将始终是同一个对象。但是,如果对象的内部状态在没有final
修改器的情况下仍然可以更改,则添加final
不会阻止被引用对象的内部状态更改。特别是对于final
数组,不能重新分配数组引用本身,但数组元素仍然可以更改
在您的情况下,您可以通过简单地从字符串变量中删除final
修饰符来避免使用数组。数组在Java中从来都不是不变的。我想您的问题在这里得到了回答: