Java 为什么我的时间都一样?

Java 为什么我的时间都一样?,java,time,Java,Time,所以我开始使用System.currentTimeMillis;我试图在两种方法之间测试结果。我决定放弃我的方法,这样它所做的事情就不会妨碍我。基本上我看不到时间上的任何变化。我有这样的想法: double start= System.currentTimeMillis(); double end=System.currentTimeMillis(); public void displayMethod() { System.out.println("The start tim

所以我开始使用System.currentTimeMillis;我试图在两种方法之间测试结果。我决定放弃我的方法,这样它所做的事情就不会妨碍我。基本上我看不到时间上的任何变化。我有这样的想法:

double start= System.currentTimeMillis();
double end=System.currentTimeMillis();

 public void displayMethod()
 {

     System.out.println("The start time is" + start);
     for (ITERATIONS AND STUFF)
     {
        System.out.format(STUFF BEING PRINTED);
    }   
    System.out.println("The end time is" + end);
    double difference = start-end;
    System.out.println("The difference " + difference);
 }
我的想法是,我有一个开始时间,从每次打印报表到结束的时间。然后减去它以显示差异。但是没有区别,所有的时间都是一样的。为什么会这样

我正在考虑使用nanotime,但我真的不知道如何使用它,而且我听说它需要性能的提升

有谁能告诉我为什么我的时间都是一样的,并提出一个解决问题的方法吗 修好它或者给我一条合适的替代路线
回答?

从一开始,你就得到了所有的机会。你需要在你想知道时间的地方调用System.currentTimeMillis

您在开始时用以下几行代码捕获所有时间:

double thetime= System.currentTimeMillis();
double start= System.currentTimeMillis();
double end=System.currentTimeMillis();
您得到相同的时间,因为这些行是立即背靠背执行的,并且是快速调用,因此很可能在不到1ms的时间内发生

将代码调整为:

 public void displayMethod()
 {
     long start= System.currentTimeMillis();
     System.out.println("The start time is" + start);
     for (ITERATIONS AND STUFF)
     {
        System.out.format(STUFF BEING PRINTED);
        System.out.println(System.currentTimeMillis());
    }   

    long end=System.currentTimeMillis();
    System.out.println("The end time is" + end);
    double difference = end-start;
    System.out.println("The difference " + difference);
 }
注意变量的声明是如何移动到需要它们的地方的。需要注意的是,变量赋值发生在声明时间而不是使用时间,因此将对System.currentTimeMillis的调用移动到您想要捕获当前时间的点非常重要


旁注:我将变量调整为long而不是double,因为System.currentTimeMillis返回一个long,这里没有理由使用double。

您应该调用currentTimeMillis减去开始时间,从中可以找到运行的总时间。

您在开始时同时设置所有时间变量。如果你想让它们不同,你需要得到程序执行过程中不同点的时间。这些语句在赋值时会被计算。简单地使用这些变量不会导致表达式重新计算。Oy。您连续三次快速调用该方法,但每次都给出相同的答案,您感到惊讶吗?您需要在运行方法之前调用它一次以收集开始时间,在调用方法以收集结束时间之后再次调用它。你怎么可能期望在调用方法之前测量结束时间呢?我让它在开始、程序和结束时运行。它仍然给我同样的时间。即使我把它从中间去掉,它仍然给我相同的数字。我知道我做错了什么。你必须在你想要显示的确切位置初始化保存时间的变量。我想我知道发生了什么。