rt :
1.for(int i = 100000; i > 0; i–-) {} 2.for(int i = 1; i < 100001; i++) {} 哪个更快

解决方案 »

  1.   

    java下面好像没什么区别吧在c / c++ 下面好像才有区别之前有人发帖说过这个问题了
      

  2.   


    经过我机器测试 第一个的时间是第二个的大概两倍!
    【把值改到 10000000 时才能看到经历了几十毫秒】
    Date date = new Date();
    long l1 = new Date().getTime();
    for(int i = 10000000; i > 0; i--) {} 
    long l2 = new Date().getTime();for(int i = 1; i < 10000001; i++) {}
    long l3 = new Date().getTime();
    System.out.println(l1);
    System.out.println(l2);
    System.out.println(l3);
    其中一次的执行结果:
    1279175742430
    1279175742461
    1279175742477第一次大概30毫秒
    第二次大概15毫秒。
      

  3.   


    public class ForTest {
    public static void for1() {
    long bTime = System.nanoTime();
    for (int i = 0; i < 100000000; i++) {
    // do nothing
    }
    System.out.println(System.nanoTime() - bTime);
    } public static void for2() {
    long bTime = System.nanoTime();
    for (int i = 100000000; i > 0; i--) {
    // do nothing
    }
    System.out.println(System.nanoTime() - bTime);
    } public static void main(String[] args) {
    for2();
    for1();
    }
    }测试结果飘忽不定..     
      

  4.   

    两种方法执行速度并没有多大区别Test 1: 56424980
    Test 2: 56462213
      

  5.   

    实测结果:
    JDK1.5: 第一种慢一倍
    JDK1.6: 第一种稍微快一点
      

  6.   

    第一个直接拿栈顶数和0比较,第二个比较两个栈顶数,应该第一个可能快那么 yi mia mia
      

  7.   

    经过多番测试,证明:++ -- 都一样!看系统public static void main(String[] args) {
    long sum = 0l;
    long start = (new Date()).getTime();

    for(int i = 999999999 ; i > 0 ; i --) {
    sum += i;
    }
    long end = (new Date()).getTime();

    System.out.println("--- :" + (end - start));
    sum = 0;
    start = (new Date()).getTime();

    for(int i = 1 ; i <= 999999999 ; i ++) {
    sum += i;
    }


    end = (new Date()).getTime();
    System.out.println("+++ :" + (end - start));
    }
      

  8.   


    同意,还有,> 比>= 快一些 ,比如 <= size - 1 写成 < size 更好
      

  9.   

      我觉得是一样快的
        其实LZ 没必要纠结这个啊
       可以测试下的啊  end-start 就好了啊
      

  10.   

    建议了解一下cpu执行一条加法指令和一条减法指令的时间。
      

  11.   

    第一个快,测试结果如下:
    public class Test {
    public static void main(String[] args) {
    long start1 = new java.util.Date().getTime();
    for(int i = 100000; i > 0; i--) {
    System.out.println("循环 1");
    }
    long end1 =  new java.util.Date().getTime();
    System.out.println(end1-start1);

    long start2 = new java.util.Date().getTime();
    for(int i = 1; i < 100001; i++) {
    System.out.println("循环2");

    long end2=  new java.util.Date().getTime();
    System.out.println(end2-start2);
    }
    }
    结果:
    .
    .
    .
    循环 1
    循环 1
    循环 1
    952
    循环2
    循环2
    循环2
    .
    .
    .
    1516
      

  12.   


    你这个测试结果是在哪里运行的?如果是在eclipse里面,恭喜你,测试不公平,永远第一个合算。
      

  13.   

    System.out在eclipse里面被重定向到了一个textarea里面,显然后测试的代码,单次执行一次sysout,花费的时间更多
      

  14.   

    本人多次测试结果:public class Test1{
    public static void main(String[] agrs){
    long start1 = new java.util.Date().getTime();
    for(int i=100000;i>0;i--)
    {
    System.out.println("循环1");
    }
    long end1 = new java.util.Date().getTime();
    System.out.println(end1-start1);
    }
    }
    /*循环1
    循环1
    循环1
    40995*/
    /*Eclipse下循环1
    循环1
    循环1
    1524
    */public class Test2 {
    public static void main(String[] args){
    long start2 = new java.util.Date().getTime();
    for(int i=1;i<100000;i++)
    {
    System.out.println("循环2");
    }
    long end2 = new java.util.Date().getTime();
    System.out.println(end2-start2);
    }
    }
    /*
    循环2
    循环2
    循环2
    循环2
    循环2
    循环2
    38794
    */
    /*
    Eclipse下
    循环2
    循环2
    循环2
    1406
    */