java变量的创建,创建变量的别名/引用(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

...

}

temp是myvariable的副本还是引用?

你如何得到一份副本/一份对它的引用?

所以没有办法保存一些内存并获得指向myVariable的引用/指针?

Java总是通过值传递。阅读stackoverflow.com/questions/40480/…因此它是内存安全的

您的示例中只有一个int[]。根本没有复制。方法getVar返回的是对对象的引用。

线后

int[] temp = myObject.getvariable();

temp和myVariable都是对同一对象的引用。您可以通过执行例如temp[0] = 9;来测试这一点。这两个地方的变化都是可见的。

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

实际上,在这个特定的案例中,你是对的。

这个答案对我来说似乎是正确的,但不适合其他人:修改temp[0]会影响我的objet对myVariable[0]的影响?

@阿奇诺是的,会的。

这会使您感到困惑,因为与C不同,Java只是传递值。因此,您将没有对该对象的引用,而是只有一个副本,然后如果您对该变量进行任何修改,原始变量将不会受到影响。更详细地查看这个问题:Java是"通过引用"还是"按值传递"?

编辑

更具体地说,在您的示例中,您将实际获得对数组的引用。不过,这不像是一个C指针。你得到一个引用仅仅是因为你复制的实际值是一个引用本身。如我所说,您可以在上面的链接中找到关于这一点的更详细的解释。

所以没有办法保存一些内存并获得指向myVariable的引用/指针?

@ Arcyno,你可能想看看这个:StAdppOrth.com /问题/ 1750106 / & Helip;

我能看出什么让你困惑,让我给你看一张ExMaple。

MyCase.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;

}

}

爪哇

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[],如下所示:

public int[] getVar(){

return myVariable;

}

Java总是通过价值传递

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值