i++:先引用后增加
++i:先增加后引用 这两句话是通过什么来证明的,感激不尽,
我还想问下,
++i
i++
分别创建了几个对象,大侠们,真正懂的帮我解答下,一瓶子不满半瓶子咣当(像我似的)都来学习学习吧。
在创建对象上有什么疑问的地方,大家一起提出来,大家一起解决解决,java初学者,对创建对象, 和对象的引用确实搞不太清
如果在创建对象的时,!!!!是在堆中创建一个实例地址,然后指向一个队列中,在队列中创建的引用吗????
感谢了!~~
真有愿意帮忙的加小弟QQ感激不尽。
小弟分少想多提些问题,见谅了!!

解决方案 »

  1.   

    i++ 就是先拿i使用,在让i自增;
    ++i 就是先让i自增,在拿自增后的i使用
    我是这样理解的,一起探讨吧!
      

  2.   

    1.这两句话是通过什么来证明的
    执行javap 看字节码java的表达式求职是从左向右的顺序,这个没有异议吧。
    ++是对变量执行+1操作,这个也没有异议吧。
    JVM中的指令大多是零地址指令,是一个基于栈架构的指令系统。解释器解释指令时最多的操作就是出栈,入栈;看这句:int j = i++;
    =号优先级比++低,先执行i++:
    先将变量i的值压入栈,然后看到++了,就对变量i执行加1的操作(这里是直接对变量i加1,不是对压入栈的值加1)。然后执行=,就是把栈顶值赋值给j。栈顶值是什么?i原来的值,加1了吗?没有。再看这句:int j = ++i;
    =号优先级比++低,先执行++i:
    先看到++了,对变量i执行加1的操作,然后是把变量i的值压入栈(前一步已经加1了,这时压入栈的是加过1后的值。)然后执行=,就是把栈顶值赋值给j。栈顶值是什么?加过1后的值,加1了吗?加了。现在明白i++和++i了吗?---------------------------------------------------------------------
    2.“分别创建了几个对象”
    如果i是一个局部变量,那么i在执行这段代码的时候只是在栈上存在(局部变量表保存这个i(上面说的“直接对变量i加1”,就是操作这个i);操作数栈(上说的“把i的值压入栈”,就是往操作数栈压) )。所以一般不把这个i称作是“对象”
    如果i是一个实例变量,也就是 private int i,这样的。你在创建一个改类的对象的时候,在堆内存中会有给这个类的的对象分配一块内存空间,这块内存空间里有这个i的一席之地。
    如果i是一个类变量。也就是 private static i,这样的。这个i是属于类的一部分,也就是在虚拟机加载这个类的时候会创建这个类的一个class对象,这个i是属于他的一部分。所有该类的对象共享一份。最后:int类型的值如果超出short表示范围也就是两个字节的时候是放入常量池的,否则由变量直接保存。
      

  3.   

    大师, 我做了个测试,
    用for循环
    /*
    for(int i=0;i<10;i++){
       System.out.println(i);
    }
    for(int j=0;j<10;j++){
       System.out.println(j);
    }
    */
    /*
    for(int i=0;i<10;){
    i++;
    System.out.println(i);
    }
    for(int j=0;j<10;){
    j++;
    System.out.println(j);
    }
    */
    这两段代码运行次数是相同的吗、? 并且输出的结果是不一样的, 为什么 ?
      

  4.   

    错了,  j++ 那变成 ++j
     在for循环中,好象这两种写法是一样的啊。有什么不同之处吗?
      

  5.   

    不同就是j++比++j多用了一个隐含对象来存放之前的值。
    换句话说,在不考虑先后加值的情况下,++j比j++更省资源。
    我已经要求我们的人能用++j的情况下尽量用,尤其这个j是个对象时(例如literator)不用感谢组长,结贴吧。