You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何交换两个Date类型对象?代码异常问题排查

Java自定义Date对象交换问题修复

现有代码存在的问题

  • 参数不匹配:你定义的swap方法要求传入Date类型数组,但实际调用时传入的是dt[0]、dt[1]两个独立的Date对象,参数类型不符,代码无法编译运行。
  • 方法调用权限错误:swap是实例方法,不能在静态的main方法中直接调用,需要修改为静态方法,或者创建类实例后调用。
  • 缺少基础类逻辑:自定义Date类没有实现对应的构造方法,也没有重写toString方法,无法正常初始化对象,也不能按要求的日期格式输出内容。
  • 对Java值传递特性理解有误:如果直接传入两个独立的对象作为交换参数,方法内交换的只是引用的副本,不会影响外部原变量的指向,因此需要通过数组作为载体完成交换。

修正后完整代码

public class Date {
    int year, month, day;

    // 补充构造方法
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    // 重写toString方法,符合预期输出格式
    @Override
    public String toString() {
        return year + "/" + month + "/" + day;
    }

    public static void main(String[] args) {
        Date dt[] = new Date[2];
        dt[0] = new Date(1,2,3);
        dt[1] = new Date(4,5,6);

        System.out.println("Before: d1 = "+dt[0]+" d2 = "+dt[1]);
        // 传入整个数组作为swap参数
        swap(dt);
        System.out.println("After: d1 = "+dt[0]+" d2 = "+dt[1]);
    }

    // 将swap修改为静态方法,接收Date数组参数
    public static void swap(Date dArr[]){
        Date temp;
        temp = dArr[0];
        dArr[0] = dArr[1];
        dArr[1] = temp;
    }
}

运行结果

Before: d1 = 1/2/3 d2 = 4/5/6
After: d1 = 4/5/6 d2 = 1/2/3

完全符合预期交换效果。

内容的提问来源于stack exchange,提问作者Onkar Kure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 16:45:00