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
相关产品推荐
相关产品推荐

