为什么这个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;ifor)(int i=0;ifor)(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”。