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

为什么这个Java代码不打印长值?,java,long-integer,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.st

我编写了一个简单的秒表类,如下所示

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());
}
 }  




  }
公共类秒表
{
私人长启动时间;
私人停车时间长;
私有布尔运算;
公开作废开始()
{
this.startTime=System.currentTimeMillis();
此.isRunning=true;
}
公共停车场()
{
this.stopTime=System.currentTimeMillis();
此.isRunning=false;
}
公共长时间运行()
{
如果(正在运行)
{
返回((System.currentTimeMillis()-startTime));
}
其他的
{
返回((停止时间开始时间));
}
}
公共静态void main(字符串[]args)
{
秒表s=新秒表();
尝试
{
s、 Start();
整数和=0;

对于(int i=0;i
for)(int i=0;i
for)(int i=0;i对于currentTimeMillis正在使用的时钟,可能事情运行得太快了?
这个函数以毫秒为单位返回值,但我认为它不需要毫秒的分辨率


事实上:()

对于currentTimeMillis使用的时钟来说,可能运行得太快了? 这个函数以毫秒为单位返回值,但我认为它不需要毫秒的分辨率

事实上:()

代码

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

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

for(inti=0;i实际上这两个时间是相同的,这就是它返回0的原因

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

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

实际上,这两个时间是相同的,这就是为什么它返回0

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

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

若要添加到其他答案,取决于您的系统,
system.currentTimeMillis()
实际上不一定计算到最接近的毫秒。

若要添加到其他答案,取决于您的系统,
system.currentTimeMillis()
的实际计数不一定是最接近的毫秒。

必须不小于一毫秒,系统计时器不需要具有该分辨率。对于Windows,它通常是16毫秒…(只是一个注释,仍然是+1)@CarlosHeuberger:是的。在linux系统中,它通常是8到10毫秒,计时器依赖于系统中断分辨率。它不能小于1毫秒,系统计时器不需要具有该分辨率。对于Windows,它通常是16毫秒…(只是一个注记,仍然+1)@CarlosHeuberger:是的。在linux系统中,通常是8到10毫秒,计时器依赖于系统中断分辨率。像这样的典型循环每次迭代大约需要1纳秒或更少。即使使用nanoTime()循环运行的时间不够长,不足以产生影响。注意:JVM擅长优化代码,而这些代码不会做任何事情,因此您可能会发现,即使进行100000000次迭代,也不会花费任何时间。方法名称不应以大写字母开头。“start”和“Stop”应该是“start”和“Stop”。像这样的典型循环大约需要1每次迭代不超过ns。即使使用nanoTime()循环的运行时间不足以产生影响。注意:JVM擅长优化代码,而这些代码不会做任何事情,因此即使进行100000000次迭代,也不会花费任何时间。方法名称不应以大写字母开头。“start”和“Stop”应为“start”和“Stop”。