这种情况好像是不计算x的值的,Delphi里面是不计算的,你可以debug跟踪一下看看。

解决方案 »

  1.   

    public class Test1 {    private static final int _count = 100000000;    public static void main(String[] args) {
            long t = System.currentTimeMillis();
            for (int i = 0; i < _count; i++) {
                func1(i);
            }
            System.out.println(System.currentTimeMillis() - t);
        }    static int func1(int i) {
            double x = 1.27 * 1.27 * 1.27 * 1.27;
            return i++;
        }
    }
    ----------------------------------------------------------------------
    javap -classpath classes -c Test1
    --->public static void main(java.lang.String[]);
      Code:
       0:   invokestatic    #2; //Method java/lang/System.currentTimeMillis:()J
       3:   lstore_1
       4:   iconst_0
       5:   istore_3
       6:   goto    17
       9:   iload_3
       10:  invokestatic    #3; //Method func1:(I)I
       13:  pop
       14:  iinc    3, 1
       17:  iload_3
       18:  ldc     #4; //int 1000000
       20:  if_icmplt       9
       23:  getstatic       #5; //Field java/lang/System.out:Ljava/io/PrintStream;
       26:  invokestatic    #2; //Method java/lang/System.currentTimeMillis:()J
       29:  lload_1
       30:  lsub
       31:  invokevirtual   #6; //Method java/io/PrintStream.println:(J)V
       34:  returnstatic int func1(int);
      Code:
       0:   ldc2_w  #7; //double 2.60144641d
       3:   dstore_1
       4:   iload_0
       5:   iinc    0, 1
       8:   ireturn}
    --------------------------
    从static int func1(int);可以看出:
    double x = 1.27 * 1.27 * 1.27 * 1.27;在编译时就已经算出来了,并
    保存在常量池中。
      

  2.   

    这也正常啊运算效率  
    java只能达到和c相当的水平吧   应该比c略低才对吧
    gz
      

  3.   

    改为这个再测试试for (int i = 0; i < 1000000; i++) {
          func1(i);
        }static int func1(int i) {
        double x = 1.27 * 1.27 * 1.27 * 1.27*((i*0)+1);
        return i++;
      }
      

  4.   

    这回不同了
    static int func1(int);
      Code:
       0:   ldc2_w  #7; //double 2.60144641d
       3:   iload_0
       4:   iconst_0
       5:   imul
       6:   iconst_1
       7:   iadd
       8:   i2d
       9:   dmul
       10:  dstore_1
       11:  iload_0
       12:  iinc    0, 1
       15:  ireturn}
      

  5.   

    我认为这个题目应该进不了循环,因为INT 的范围好想没有那么大,而数据的存储会以反码的形式存在,1000000在里面是一个负数,所以进不了
      

  6.   

    Integer.MAX_VALUE == 2^32-1 == 2147483647