为什么这个Java代码不能打印Long值?

时间:2011-10-24 09:02:14

标签: java long-integer

我写了一个简单的秒表课程如下。

public class StopWatch 
{
  private long startTime;
  private long stopTime;
  private boolean isRunning;


  public void Start()
 {
this.startTime=System.currentTimeMillis();
this.isRunning=true;

 }

 public void Stop()
 {
this.stopTime=System.currentTimeMillis();
this.isRunning=false;

 }


public long timeElapsed()
{
if(isRunning)
{
    return ((System.currentTimeMillis()-startTime));

}
else
{
    return ((stopTime-startTime));
}



 }
 public static void main(String[] args) 
 {
StopWatch s=new StopWatch();
try
{
s.Start();
int sum=0;
for( int i=0;i<=10;i++)
{

sum=sum+i;  

}
s.Stop();
long timetaken=s.timeElapsed();
System.out.println(timetaken);
}
catch(Exception e)
{
    System.out.println(e.getMessage());
}
 }  




  }

如果我添加+ 100L来停止时间,那么我的回答为100.出于某种原因,starttime和stoptime都具有相同的值,减法为0.不确定为什么会发生这种情况。

我还把100000作为循环计数器,甚至给了我0.虽然复制粘贴代码的值为10 in for循环。

在纳秒时它工作正常,我试图检查Java中自动装箱带来的性能问题。

5 个答案:

答案 0 :(得分:4)

for( int i=0;i<=10;i++) {  sum=sum+i;    } 

上述代码的执行时间为less than a millisecond。试试System.nanoTime()

答案 1 :(得分:1)

对于currentTimeMillis正在使用的时钟,事情可能运行得太快了? 此函数以毫秒为单位返回值,但我认为不需要它具有毫秒的分辨率。

事实上:http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()

答案 2 :(得分:0)

代码

for( int i=0;i<=10;i++) {  
   sum=sum+i;    
}

在不到一毫秒的时间内执行:)使用类似

的内容
for( int i=0;i<=10;i++) {  
   sum=sum+i;    
   Thread.sleep(100L);
}

看到结果,虽然我不确定你的目标是什么。

答案 3 :(得分:0)

实际上两个时间都是相同的,这就是它返回0的原因。

在stop方法的顶部使用它,它将给出正确答案:

         try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 4 :(得分:0)

要添加到其他答案,根据您的系统,System.currentTimeMillis()实际上不一定计算到最接近的毫秒。