创建变量数组

时间:2014-04-18 05:26:23

标签: java arrays variables

我有一个关于创建变量数组的问题;如果我创建一个整数类型的变量数组,并且我更改数组之外的那些变量的值,那么数组内的值也会更新?我已经在eclipse中试过这个并且它似乎不起作用(见下面的代码)

int num1 = 1;
int num2 = 2;
int num3 = 3;
int [] nums = {num1, num2, num3};
num1++;
System.out.println(num1);
System.out.println(nums[0]);

我希望的是两个输出(num1nums[0])是相同的,但到目前为止我所遇到的是nums[0]保持不变并且没有& #39; t得到更新,任何有关如何更新此值的提示(无需进入并更新)都非常感谢

2 个答案:

答案 0 :(得分:5)

Java的int类型是值类型而不是引用类型,因此在创建数组时,旧int将复制到数组中。因此,更改原始数据(在数组外部)不会更改数组内的独立副本。

为了实现你想要的行为,你可以使用Erwin的解决方案,或者你必须创建自己的包装类来实现额外的间接值,不幸的是这很简单。

class IntWrapper {
    public int value;
    public IntWrapper(int i) {
       value = i;
    }
}

class Main{
public static void main(String[] args) { 
   IntWrapper num1 = new IntWrapper(1);
   IntWrapper num2 = new IntWrapper(2);
   IntWrapper num3 = new IntWrapper(3);

   IntWrapper[] nums = {num1, num2, num3};
   num1.value++; 
   System.out.println(num1.value);
   System.out.println(nums[0].value);
}
}

答案 1 :(得分:0)

在Java中,原始类型按值传递。将num1放入数组nums后,会制作副本。如果您稍后更改num1,则它对数组中的值没有影响。 对象引用也按值传递,但对象本身不是 - 它们通过传递对它们的传递来传递。因此,如果您创建一个表示整数的对象数组,并且可以修改这些对象,那么您可以执行所需的操作。

标准API有一个表示整数的类,称为java.lang.Integer。但是,它代表不可变整数,因此对您没用。 在标准API中,还有另一个名为java.lang.concurrent.atomic.AtomicInteger的类。可以修改此类的对象。

你可以像这样使用它:

AtomicInteger num1 = new AtomicInteger(1);
AtomicInteger num2 = new AtomicInteger(2);
AtomicInteger num3 = new AtomicInteger(3);
AtomicInteger[] nums = {num1, num2, num3};
num1.incrementAndGet();
System.out.println(num1);
System.out.println(nums[0]);