首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java方法调用

Java方法调用
EN

Stack Overflow用户
提问于 2011-05-19 15:00:58
回答 2查看 105关注 0票数 0
代码语言:javascript
运行
复制
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;
  }

 }

上面的代码运行良好。输出为

代码语言:javascript
运行
复制
d1 is Fri December 31 00:00:00 GMT 1999
d2 is Sun December 31 00:00:00 GMT 2000

但是当我在一个类似的方法中使用像Integer这样的包装类时,变化不是reflected.why吗?

EN

回答 2

Stack Overflow用户

发布于 2011-05-19 15:07:08

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

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

由于Integer是不可变的(即Integer对象一旦创建就不能更改),所以没有办法进行这样的操作。简单地给方法内的d1d2赋一个新值对main内的d1d2没有任何影响。

当您以不同于main中的变量的方式调用方法的参数时,所有这些可能会变得不那么令人困惑。这将更清楚地表明,它们是,而不是以任何方式相关的。

票数 2
EN

Stack Overflow用户

发布于 2011-05-19 15:10:15

整数包装器是不可变的,因此您无法对该对象进行任何修改

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6054954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档