public class plusLoop { public static void main(String[] args) { int j =0 ; for (int i=0;i<100;i++){ // j=j++; //TODO:输出为0 // j = ++j; //TODO: 输出为100 // j +=1; //TODO:输出为100 j++; //TODO:输出为100 /** * j+=1 和 j++得到的结果是一样的,很多情况下他们是类似的, * j+=1 运行时底层Heap层申请一个区域存放j,再开辟另外一个区域存放1,两个内存段被数据送入寄存器中计算,计算的结果再返回到Heap层,计算的区域自动释放内存 * 所以如果想要提高效率的话,就把1设置为静态变量 static int i = 1; * j++ 不会申请区域,直接将Heap中的数据放到寄存器中,运行完了返回到Heap层 * * j=j++为什么输出是零,而j=++j为什么就是100,个人理解 j++ 是先调用后增值,循环结束时本应加一(j++输出一百),但是一直赋零。 * ++j * * Heap和Satck的区别 * Stack(栈):特点就是后进先出(LIFO),且stack是有结构的,有一定的次序,并明确每个区域的大小 * Heap(堆): 大小不确定,需要可以继续向上加 * stack的寻址速度要快于heap;所有的对象都存放在heap;一般来说,内存泄漏都发生在heap; */ } System.out.println(j); } }