Java 最终变量在不应更改时更改';不可能
大部分代码来自讲师提供的模板。 基本上,每次Assert第二次运行任何函数(例如mult函数)时,它都使用第一次运行该函数时返回的结果,而不是应该传入的数组U[]的原始值 乘法函数:Java 最终变量在不应更改时更改';不可能,java,Java,大部分代码来自讲师提供的模板。 基本上,每次Assert第二次运行任何函数(例如mult函数)时,它都使用第一次运行该函数时返回的结果,而不是应该传入的数组U[]的原始值 乘法函数: `static double [] mult(double a, double [] V) { // multiplying scalar and vector double[] ans = V; //double [] ans = {1.0, 2.0, 3.0, 4.0}; for(int
`static double [] mult(double a, double [] V) { // multiplying scalar and vector
double[] ans = V;
//double [] ans = {1.0, 2.0, 3.0, 4.0};
for(int i =0; i<4; i++)
{
ans[i] = V[i]*a;
}
System.out.print("mult =" + ans[0] +" " + ans[1] +" " + ans[2] +" " + ans[3] + "\n");
return ans;
}`
这是因为您分配了
double[]ans=V代码>而不是像这样使用新数组:
double[]ans=新的双精度[V.length];
您无意中将获取的数组用作结果数组的参数,然后更改值(这是合法的,但为false)
final
仅引用您声明的引用,例如:
final int[]a={1,2,3};
a[2]=5;
是完全合法的,你不能:
a=newint[]{3,4,5};//由于标识符a上的最终修饰符而导致编译错误。
final
与const
不同(Java中不存在)<代码>最终版
仅影响声明本身。它不是递归的或“病毒性的”,不影响U
的内容,只影响U
本身的定义。
public static void main(String[] args) {
final double [] U = {1, 2, 3, 4};
Assert(mult(2, U)[0] == 2.0); //returns U = 2.0, 4.0, 6.0, 8.0
Assert(mult(2, U)[1] == 4.0); //returns U = 4.0, 6.0, 8.0, 10.0 (should return same as above)
Assert(mult(2, U)[2] == 6.0);
Assert(mult(2, U)[3] == 8.0);