Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 - Fatal编程技术网

Java 最终变量在不应更改时更改';不可能

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

大部分代码来自讲师提供的模板。 基本上,每次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 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);