BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #46596同步于 2015/12/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

问一个非常简单奇怪的java程序问题

SunnyRain
2015/12/25镜像同步8 回复
程序想测试某个函数的执行时间,这里用Thread.sleep(6000);替代。HashMap<String,Date[]>中Date[0]保存开始时间,Date[1]保存结束时间。可是在第一个for循环中读取到的HashMap<String,Date[]> ald是正常的,在第二个for循环中却只有最后一个value了,key都正常,见程序及结果。新手求指教~ 直接上程序: //统计function运行时间 System.out.println("时间测试start"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); HashMap<String,Date[]> ald = new HashMap<String,Date[]>(); Date[] date = new Date[2]; for(int i=0;i<5;i++){ date[0] = new Date(); Thread.sleep(6000);//function date[1] = new Date(); ald.put(""+i, date); //下面输出的时间正常 System.out.println(i+" start time:"+sdf.format(ald.get(i+"")[0])); System.out.println(i+" end time:"+sdf.format(ald.get(i+"")[1])); } System.out.println("---------------------------------------"); //for(String key:ald.keySet()){ for(int i=0;i<5;i++){//这里读取的时间不正常 System.out.println(i+" start time:"+sdf.format(ald.get(i+"")[0])); System.out.println(i+" end time:"+sdf.format(ald.get(i+"")[1])); } System.out.println("时间测试end"); 执行结果: 时间测试start 0 start time:2015-12-25 15:11:32 0 end time:2015-12-25 15:11:38 1 start time:2015-12-25 15:11:38 1 end time:2015-12-25 15:11:44 2 start time:2015-12-25 15:11:44 2 end time:2015-12-25 15:11:50 3 start time:2015-12-25 15:11:50 3 end time:2015-12-25 15:11:56 4 start time:2015-12-25 15:11:56 4 end time:2015-12-25 15:12:02 --------------------------------------- 0 start time:2015-12-25 15:11:56 0 end time:2015-12-25 15:12:02 1 start time:2015-12-25 15:11:56 1 end time:2015-12-25 15:12:02 2 start time:2015-12-25 15:11:56 2 end time:2015-12-25 15:12:02 3 start time:2015-12-25 15:11:56 3 end time:2015-12-25 15:12:02 4 start time:2015-12-25 15:11:56 4 end time:2015-12-25 15:12:02 时间测试end
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
icyfox机器人#1 · 2015/12/25
引用问题: 你在line 5建立的Date[]数组一直就只有一个,是的,整个程序里,就只有一个Date[2]数组。 所以你在第一个循环里,不断的改变的,就是那么一个数组而已,最后map里虽然我5个key,但是这5个key都指向了同一个value,就是上面那个数组
ljcmeng机器人#2 · 2015/12/25
LZ把date数组的初始化放到第一个for循环里面估计就对了
SunnyRain机器人#3 · 2015/12/25
3q~get了,原来是值传递的问题。。。 【 在 icyfox 的大作中提到: 】 : 引用问题: : 你在line 5建立的Date[]数组一直就只有一个,是的,整个程序里,就只有一个Date[2]数组。 : 所以你在第一个循环里,不断的改变的,就是那么一个数组而已,最后map里虽然我5个key,但是这5个key都指向了同一个value,就是上面那个数组
SunnyRain机器人#4 · 2015/12/25
是的,3q~ 【 在 ljcmeng 的大作中提到: 】 : LZ把date数组的初始化放到第一个for循环里面估计就对了
TonyFromDire机器人#5 · 2015/12/25
哈哈,我是来看头像的,逗
icybee机器人#6 · 2015/12/25
虽然不知道大神们在讨论什么,然而还是来摸摸楼主的头
nuanyangyang机器人#7 · 2015/12/25
用System.nanoTime()试试看?顺便摸摸楼主~
NA机器人#8 · 2015/12/25
这头像的图有些年头了。。大约在04年就在qq上见过,那时候家里刚接网 【 在 TonyFromDire ([大黄团][胀笨的托尼][团长已被我包养]) 的大作中提到: 】 : 哈哈,我是来看头像的,逗