Java中间缓存变量机制(i++)
来源:互联网 发布:网络搞笑红人排行榜 编辑:程序博客网 时间:2024/04/29 13:15
Java程序员面试宝典(第二版)中有这样一道笔试题:
- /**下列程序的输出结果是()*/
- import java.util.*;
- public class Test{
- public static void main(String[] args){
- int j = 0;
- for(int i=0;i<100;i++){
- j = j++;
- }
- System.out.println(j);
- }
- }
结果很像是 100,为什么是 0?
因为Java用了中间缓存变量机制,所以j=j++;可以换成如下写法:
- temp = j;
- j = j++;
- temp = j;
至此貌似是明白了!那么再来一题:
- /**下来代码执行的结果*/
- import java.util.*;
- public class Test2{
- public static void main(String args[]){
- int i = 0;
- i = i++ + ++i;
- int j = 0;
- j = ++j + j++ + j++ + j++;
- int k = 0;
- k = k++ + k++ + K++ + ++k;
- int h = 0;
- h = ++h + ++h;
- System.out.println("i="+i);
- System.out.println("j="+j);
- System.out.println("k="+k);
- System.out.println("h="+h);
- }
- }
i=2
j=7
k=7
h=3
看到结果貌似不是真的明白Java的 i++和++i !
问题实质:在java中,执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加1后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加1”。运算最终使用的,并不是变量本身,而是被赋了值的临时变量。
上述程序计算方法:
- int i = 0;
- i = i++ + ++i; //i=2,等效执行以下程序
- /*
- * temp1 = i; //i=0,temp1=0
- * i = i + 1; //i=1
- * i = i + 1; //i=2
- * temp2 = i; //i=2,temp2=2
- * a = temp1 + temp2 //i=2;
- */
- int j = 0;
- j = ++j + j++ + j++ + j++; //j=7
- /*
- * j = j + 1; //j=1
- * temp1 = j; //j=1 , temp1=1
- * temp2 = j; //j=1, temp2=1
- * j = j + 1; //j=2
- * temp3 = j; //j=2,temp3=2
- * j = j + 1; //j=3
- *temp4 = j; //j=3 ,temp4=3
- *j = j + 1; //j=4
- * j = temp1 + temp2 + temp3 + temp4 //j=7;
- */
- int k = 0;
- k = k++ + k++ + K++ + ++k; //k=22
- /*
- * temp1 = k; //k=0, temp1=0
- * k = k + 1; //k=1
- * temp2 = k; //k=1,temp2=1
- * k = k + 1; //k=2
- *temp3 = k; //k=2 ,temp3=2
- *k = k + 1; //k=3
- * k = k + 1; //k=4
- * temp4 = k; //k=4 , temp4=4
- * k = temp1 + temp2 + temp3 + temp4 //k=7;
- */
- int h = 0;
- h = ++h + ++h; //h=3
- /*
- * h = h + 1; //h=1
- * temp1 = h; //k=1 , temp1=1
- * h = h + 1; //h=2
- * temp2 = h; //h=2, temp2=2
- * h = temp1 + temp2 //h=3;
- */
需要注意的是:C语言中的计算方法和Java不同
0 0
- Java中间缓存变量机制(i++)
- Java中间缓存变量机制(i++)
- java i++ 的中间变量缓存机制
- 中间缓存变量机制 i++
- java中间变量缓存机制——i=i++;
- Java中间变量缓存机制
- Java中间缓存变量机制
- Java中间变量缓存机制
- java中间缓存变量机制
- Java中间缓存变量机制
- Java中间变量缓存机制
- java 中间缓存变量机制
- Java中间缓存变量机制
- Java中间变量缓存机制
- java中间缓存变量机制
- 浅谈Java中间缓存变量机制
- Java的中间缓存变量机制
- JAVA语法细节-中间变量缓存机制
- POJ 1861 Network
- Android数据库事务操作
- c语言 第一讲 字符串数组函数调用--const的灵活运用
- Codeforces Round #1A Theatre Square
- 优秀程序员需要知道的15件事
- Java中间缓存变量机制(i++)
- vi编辑器常用命令
- 第一次周赛B
- HDU 1534 Schedule Problem(差分约束系统)
- Hibernate学习笔记2014.7.19.13:25——增删改查
- 腾讯新闻-钟自然担任国土资源部党组成员、地调局局长
- UVa 1629 - Cake slicing
- java 获取姓名全拼和首字母
- 电商巨头火拼农村网购市场