为什么不声明一个数组最终使它在Java中不可变?不宣称最终意味着它无法改变?
从与不可变数组相关的问题中可以清楚地看出,声明一个数组final并不会使它不可更改.
以下是可能的.
final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;
Run Code Online (Sandbox Code Playgroud)
我的问题是:那么在这里宣布决赛的功能是什么?
假设我有一个数组
public static final String[] fooArray ={ Foo.a, Foo.b, Foo.c };
Run Code Online (Sandbox Code Playgroud)
其中Foo.ab和c是静态最终字符串.
我仍然可以做这样的事情fooArray[0] = "taco";,并最终{ taco, Foo.b, Foo.c }为fooArray的内容是什么?
如果是这样,是否会将数组设为私有,并使用getter来生成数组的副本以Arrays.copyOf解决此问题?
在main方法参数中添加final关键字可以正常工作.为什么它没有给出任何编译器错误/异常,因为我修改了java的标准main方法.
public class StackOverFlow {
public static void main(final String... args) {
System.out.println("Hi");
}
}
Run Code Online (Sandbox Code Playgroud)
现在看看我是否编码:
public class StackOverFlow {
public static void main (String... args) {
String[] str = {"I ", "haven't ", "received ", "my ", "answer." };
args[0] = "hi";
System.out.println(args[0]);
args =str;
for(int i=0; i<args.length; i++) {
System.out.print(args[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于上面的编码,当您通过传递参数来运行程序时
javac StackOverFlow Nisrin
我的程序输出是
嗨
我没有收到我的答复.
与final关键字同样如此
public class StackOverFlow {
public static void main (final String... args) {
String[] str = {"I ", …Run Code Online (Sandbox Code Playgroud)