----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
算 术 运 算 符
1.(1)算术运算符++的原理分析:
int a=3;//定义一个整型变量a并初始化值为3
a++;//这个相当于a=a+1;先将a自增1并赋值给a
System.out.println("a="+a);//输出a
我们可以看出,此时a得到了新的值为4。但是,当我们把a++换成++a的时候,此时又是什么结果呢?
int a=3;//定义一个整型变量a并初始化值为3
++a;//这个相当于a=a+1;先将a自增1并赋值给a
System.out.println("a="+a);//输出a
此时,我们得到的结果是一样的a=4。那么a++与++a的区别又是什么?
(2)我们可以看看下面的案例:
int a=3,b;//定义两个int类型的变量a和b,并将a进行初始化值为3
b=a++;
System.out.println("a="+a+",b="+b);//a=4,b=3
这时出现的结果是:a=4,b=3;那么,我们是否可以初步理解:b=a++;这条语句的含义是:先将a的初始化值3赋值给b,然后,a进行自增运算并赋值给a。
当我们把b=a++;换成b=++a的时候,此时,程序输出的结果会不会发生改变呢?
int a=3,b;//定义两个int类型的变量a和b,并将a进行初始化值为3
b=++a;
System.out.println("a="+a+",b="+b);//a=4,b=4
我们可以看出此时a和b的结果是一样的,那么我们是否可以初步理解:b=++a;这条语句的含义是:a先进行自增运算,然后将运算后的结果赋值给b
根据结果,我们对b=a++;和b=++a;这两条语句的初步理解看似是正确的,但是事实上真的是如此吗?
我们先拿b=a++;来分析:
首先我们来看看一下,它的内存图是什么样的?
因为b=a++;时,b要先做一个赋值运算,所以,我们先用1把b标识出来,假设b已经先存在了。b=a++;正确的运算原理应该是:先把右边运算完之后,再赋值给左边。也就是说a++要先进行运算,因为a自身的值要参与其他运算,那么这个时候就先用一个临时区域纪录下a的值,我们用2标识。这个时候,a就把自己的值取出来到方法区中进行自增的运算(也就是加1),方法区运算出来的结果再赋值给a。直到这个时候,右边的运算才运算完。这个时候就要把a的值赋值给b,那么它就会把之前存储在临时区域的值3赋值给b,所以,我们才得到最后的结果:a=4,b=3
同理,我们可以推出:b=++a;因为++在前面,所以先进行++运算,即:3+1=4,得到a的值为4,然后,再赋值给b。
(3)既然,我们已经了解++运算的工作原理,那么我们在来看看下面的情况:
int i=3;
i=i++;
System.out.println("i="+i);
这个时候i又是多少呢?
(友情提示:i得到的最终值是临时区域存储的值)
2.(1)算术运算符--的原理分析:
基本和++致,理解了++很容易理解--,这里就不做具体分析了。
-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------