繁体   English   中英

创建变量的别名/引用(JAVA)

[英]create an alias/reference of a variable (JAVA)

我使用了很多C ++,我对Java的工作方式很困惑:如果我有一个类

public class MyClass{
    private int[] myVariable;
     ...

    public int[] getVar(){
        return myVariable;
    }
}

然后我想在其他地方使用我的变量:

public static void main(String[] args){
    MyClass myObject  = new MyClass();
    ...
    int[] temp = myObject.getvariable();
    // use of temp
    ...
}

是临时副本还是myVariable的引用?

你如何获得它的副本/参考?

在您的示例中只有一个int[] 完全没有复制。 getVar方法getVar是对象的引用。

行后

int[] temp = myObject.getvariable();

tempmyVariable都是对同一个对象的引用。 你可以通过例如temp[0] = 9;来测试这个temp[0] = 9; 这两个地方都可以看到变化。

如果要复制数组,可以使用array.clone()Arrays.copyOf(array, array.length)System.arraycopy(...)一个,但在您的示例中不使用这些Arrays.copyOf(array, array.length)

这让你感到困惑,因为与C不同,Java只是按值传递 因此,您将不会引用该对象而只引用副本,然后如果您对该变量进行任何修改,原始文件将不会受到影响。 有关更多详细信息,请参阅此问题: Java是“通过引用传递”还是“按值传递”?

编辑

更具体地说,在您的示例中,您将实际获得对数组的引用 但是,这仍然不像C指针。 您只能获得引用,因为您复制它的实际值是引用本身。 正如我所说,你可以在上面的链接上找到更详细的解释。

我可以看到令你困惑的是什么,让我给你看一个例子。

MyClass.java

public class MyClass {
    private int i;
    private int[] a;

    public void setI(int i){
        this.i = i;
    }
    public void setA(int a[]){
        this.a = a;
    }

    public int getI(){
        return i;
    }
    public int[] getA(){
        return a;
    }
}

Test.java

public class Test {

    public static void main(String[] args) 
    {
        int a[] = {1,2};
        MyClass myClass = new MyClass();
        myClass.setI(5);
        myClass.setA(a);

        int i = myClass.getI();
        int b[] = myClass.getA();

        System.out.println(myClass.getI());
        System.out.println(myClass.getA()[0] + " " +myClass.getA()[1]);

        i = 10;
        b[0] = 3;
        b[1] = 4;

        System.out.println(myClass.getI());
        System.out.println(myClass.getA()[0] + " " +myClass.getA()[1]);
    }
}

当你看到上面代码的输出时你会发现,整数这样的原始类型总是通过Java中的值传递。 但是当您传递数组或其他对象(如Calendar类的对象)时,它将通过引用传递。

因此,更改数组的值将反映在两个整数的位置,不会。

任何建议都可以接受这个答案。 如果有人发现任何不准确之处,请随时建议编辑。

您的类MyClass中存在错误,您将遇到编译错误类型不匹配:无法从int []转换为double。 你必须将你的方法的返回类型更改为int [],如下所示:

public int[] getVar(){
return myVariable;

}

JAVA始终是按值传递的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM