Open Zakariyya opened 4 years ago
date: 2018-07-21 13:54:17 这个问题是在写工具类的时候碰到的, 有时候为了方便,直接操作形参,可能会导致函数外实参的改变, 然后bug就这样诞生了
Timestamp now = new Timestamp(System.currentTimeMillis()); System.out.println("now:: " + now.toString()); Timestamp nextTime = DateUtils.getNextTime(now, Calendar.MONDAY, 2, 12, 23, 31, TaskTypeEnums.EVERY_MONTH.getCode()); System.out.println("now after:: " + now.toString()); // 周一,2号,12:23:31,每月 System.out.println("nextTime:: ="+nextTime.toString());
打印出来的结果是
now:: 2018-07-21 13:52:29.2 now after:: 2018-07-02 12:23:31.2 nextTime:: =2018-07-02 12:23:31.2
当形参是对象时,形参指向的是实参的堆地址值,直接在函数中操作形参自然会影响到实参 但是,当形参是基础类型时,实参值不受影响
Class Monitor{ private String cpuUsed; String getCpuUsed(){ return cpuUsed; } } main(){ int flag = 2; Monitor a = new Monitor(); flagObject.setCpuUsed("11"); System.out.println("before::flag:: "+flag+",a:: "+a.getCpuUsed()); aaa(flag,a); System.out.println("after::flag:: "+flag+",a:: "+a.getCpuUsed()); } public static void aaa(int a, Monitor a1){ a+=1; a1.setCpuUsed("22"); }
结果
before::flag:: 2,a::11 after::flag:: 2,a::22
打印出来的结果是
提供一段伪代码
结果