Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最终字符串[]和最终字符串_Java_Arrays_Jframe_Actionlistener_Final - Fatal编程技术网

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中从来都不是不变的。我想您的问题在这里得到了回答: