Java方法调用

标签 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

但是当我在类似方法中使用像 Integer 这样的包装类时,更改没有反射(reflect)出来。为什么?

最佳答案

请注意d1即使您分配 d1 = d2 ,该方法也不会改变。这是因为d1该方法内部是存储在 d1 中的引用的副本在主要部分。

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

Integer是不可变的(即 Integer 对象一旦创建就无法更改),因此无法进行这样的操作。只需将新值分配给 d1d2该方法内部对 d1 没有影响和d2里面main .

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

关于Java方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054954/

相关文章:

java - Apache Kafka : 3 partitions, 消费者组中有3个消费者,每个消费者应该是多线程的

java - 你如何在 apache camel 中对 servlet 端点进行单元测试?

java - Maximo - 使用 java 代码获取当前工作流程位置

java - 如何列出所有 JPMS 服务?

java - Android 在应用程序中更改和设置默认语言环境

java - 如何处理 Java 中缺少的 PST 小时

java - Hibernate:处理多个事务?

java - 模式为 "yyyy[-MM[-d[ HH[:mm[:ss[.SSS]]]]]"的 DateTimeFormatter 的 DateTimeParseException

java - 使用 GSON 解析带有子数组的 JSON 数组?

java - 在 Java 中单独一行指定的 URL 不会发出编译时错误。为什么?