create an alias/reference of a variable (JAVA)
我使用了很多C++,我对Java的工作方式感到很困惑:如果我有课的话
1 2 3 4 5 6 7 8 | public class MyClass{ private int[] myVariable; ... public int[] getVar(){ return myVariable; } } |
然后我想在其他地方使用我的变量:
1 2 3 4 5 6 7 | public static void main(String[] args){ MyClass myObject = new MyClass(); ... int[] temp = myObject.getvariable(); // use of temp ... } |
temp是myvariable的副本还是引用?
你如何得到一份副本/一份对它的引用?
您的示例中只有一个
线后
1 | int[] temp = myObject.getvariable(); |
如果您想要复制一个数组,可以使用
这会使您感到困惑,因为与C不同,Java只是传递值。因此,您将没有对该对象的引用,而是只有一个副本,然后如果您对该变量进行任何修改,原始变量将不会受到影响。更详细地查看这个问题:Java是"通过引用"还是"按值传递"?
编辑
更具体地说,在您的示例中,您将实际获得对数组的引用。不过,这不像是一个C指针。你得到一个引用仅仅是因为你复制的实际值是一个引用本身。如我所说,您可以在上面的链接中找到关于这一点的更详细的解释。
我能看出什么让你困惑,让我给你看一张ExMaple。
MyCase.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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; } } |
爪哇
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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中总是通过值传递。但是,当您通过数组或其他对象时,就像日历类的对象一样,它将通过引用传递。
因此,数组的变化值将反映在两个位置上,而整数的变化值则不会。
任何建议都可以接受这个答案。如果有人发现任何不准确之处,请随时提出修改建议。
类MyClass中存在错误,您的编译错误类型不匹配:无法从int[]转换为double。必须将方法的返回类型更改为int[],如下所示:
1 2 | public int[] getVar(){ return myVariable; |
}
Java总是通过价值传递