Java方法调用

时间:2011-05-19 07:00:58

标签: java

import java.util.Date;
 public class Example {
  public static void main(String args[]) {

        Date d1 = new Date (99, 11, 31);
        Date d2 = new Date (99, 11, 31);

        method(d1, d2);
        System.out.println("d1 is " + d1+ "\nd2 is " + d2);
  }

  public static void method(Date d1, Date d2) {

        d2.setYear (100);
        d1 = d2;
  }

 }

上面的代码工作正常。输出是

d1 is Fri December 31 00:00:00 GMT 1999
d2 is Sun December 31 00:00:00 GMT 2000

但是当我在simialr方法中使用像Integer这样的包装类时,没有反映出这种变化。为什么?

2 个答案:

答案 0 :(得分:2)

请注意,d1不会被该方法更改,即使您指定d1 = d2也是如此。这是因为方法内的d1是存储在Main d1中的副本

您唯一真正的修改是调用setYear,它会修改d2引用的对象。

由于Integer是不可变的(即Integer个对象在创建后无法更改),因此无法像这样进行操作。只需在方法中为d1d2分配新值,就不会对d1内的d2main产生任何影响。

当您调用方法的参数与main中的变量不同时,所有这些可能会减少混淆。这样可以更清楚地表明他们没有任何关系

答案 1 :(得分:0)

整数包装器是不可变的,所以你无法对该对象进行任何修改