嘿嘿,好久不见!想必很多刚接触Java的同学都被这两个双胞胎兄弟弄得晕头昏脑。今天,小常就和大家一起聊聊这个问题~
好多同学都会感觉它们很相似所以经常会混淆。不要慌,今天小常带你彻底解决!从此告别烦恼!(哈哈哈哈哈好像去屑洗发水的广告啊)
首先,我们应该知道它们确实是有共同点的:不管是a++还是++a,在运行时都是以a+1的结果进行的。
那么他们又有什么不同呢?
我们先从哥哥a++说起。
我们运行a++时分为三步:1、开辟一个临时存储区。
2、将x区域本身的值赋给临时存储区。
3、给x区域本身加1。
注意!!!通常我们调用a++的值(输出,进行下一步运算等)是临时存储区的值,不是x区域的值。
好了,我们再看看弟弟++a吧!
弟弟年纪尚小,所以思维简单,直接给x本身的值加1就可以直接运算啦!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上面我们看了两兄弟的定义差别,接下来我们通过一段代码来加深理解吧!
class Test05{
public static void main(String[] args){
/*
i++
1.先开辟一个临时存储区
2.将i的值复制到存储区
3.i自身+1
4.临时存储区的值等待被调用(参与运算,输出,赋值)
*/
int i=3;
i++;
System.out.println(i); //4
System.out.println(i++);//4
int j=i++;
System.out.println(j); //5
System.out.println(i); //6
i=i++;
System.out.println(i); //6
i=i++;
System.out.println(i); //6
i=1;
j= i++ + ++i + ++i + i++;
// 1 3 4 4
System.out.println(j);
System.out.println(i);
int a=3;
a=a+3;
a+=3;
a=a+1;
a+=1;
++a;
a++;
short s=3;
//不兼容的类型: 从int转换到short可能会有损失
//s=s+3;
s+=3;
System.out.println(s);
a=1;
System.out.println(a++==1);
int m=7;
int n=11;
System.out.println(m&n); //3
/*
0111
1011
&0011 3
*/
System.out.println(m|n); //15
/*
0111
1011
|1111 15
*/
System.out.println(m^n); //12
/*异或:不同为真 相同为假
0111
1011
^1100 12
*/
System.out.println(m>>2); //1
/*
0111
01 11
*/
System.out.println(m<<2); //28
/*
0111
011100
*/
System.out.println(0b10010101>>3);
//10010
System.out.println(0b10010101<<3);
//10010101000
//x>>y x/2^y
//x<<y x*2^y
}
}