为什么我所有的时间currenttimeMillis()都一样?

mun*_*air -3 java time

所以我开始使用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);
 }
Run Code Online (Sandbox Code Playgroud)

我的想法是,我有一个开始时间,即每次打印声明和结束时间之间的时间.然后减去它以显示差异.但是没有区别,所有时间都是一样的.为什么会这样?

我正在考虑使用纳米时,但我真的不知道如何使用它,我听说它需要性能命中.

任何人都可以告诉我为什么我的时间是相同的,并建议一种方法来解决它或给我一个合适的替代路线得到答案?

Col*_*n M 5

你在这些行中开始捕捉所有的时间:

double thetime= System.currentTimeMillis();
double start= System.currentTimeMillis();
double end=System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

你得到的是相同的时间,因为这些线路是背靠背地执行的(并且快速呼叫很可能在不到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);
 }
Run Code Online (Sandbox Code Playgroud)

注意如何将变量的声明移动到需要它们的位置.重要的是要注意变量赋值发生在声明时而不是在使用时,因此将调用移动到System.currentTimeMillis()您想要捕获当前时间的点是很重要的.

旁注:我将变量调整为long而不是double,因为System.currentTimeMillis()返回a long并且没有理由在double这里.