我知道網上有很多這樣的文章了,在這我只是想記錄一下,總結一下,就當備忘錄吧。
一、什麼區別?
1、i++ 先運算再加一,++i先加一再運算
2、i++ 有中間變量,++i 沒有,理論上++i 相對運行快點
二、代碼(代碼裏有詳細的解釋)
/**
* 總結:i++ 最終去相加的都是中間變量 temp,請看例子
* @author tingliu
* @create 2017-12-19 11:11
**/
public class PlusTest {
@Test
public void test() {
String[] k = new String[2];
int i = 0;
while (i < 2) {
k[i++] = "d";
System.out.println(k);
}
}
/**
* i = i++ 等價於
* temp = i;
* i = i + 1;
* i = temp
* 總結:i++ 有中間緩存變量
* <p>
* //Warning: The assignment to variable j has no effect
* j = ++j 相當於 j = j = j + 1
* 所以編譯器警告, 語句的賦值沒有作用
* <p>
* ++i 沒有中間緩存變量, 理論上比 i++ 更加高效
*/
@Test
public void test1() {
int i = 0;
i = i++;
System.out.println(i);
int j = 0;
j = ++j;
System.out.println(j);
int k = 0;
k++;
System.out.println(k);
}
@Test
public void test2() {
int i = 0;
for (int j = 0; j < 10; j++) {
/**
temp=i;
i=temp+1;
i=temp;
*/
i = i++;
}
System.out.println("i的最後結果" + i);
}
@Test
public void test3() {
int i = 3;
int count = (i++) + (i++) + (i++);//count=3+4+5,你可以用count=(i++)+(i++);這時會等於7
System.out.println(i);//i=6
System.out.println(count);//count=12
int j = 3;
count = (++j) + (++j) + (++j);//count=4+5+6
System.out.println(j);//j=6
System.out.println(count);//count=15
}
@Test
public void test4() {
/**
* a++ 等價於
* temp=a // temp =0
* a=temp+1 // a=1
*
* ++a 等價於
* a=a+1 // a=2
*
* 所以 a++ + ++a 的過程:
* temp=a // temp =0
* a=temp+1 // a=1
* a+1 // a=2
* 最終就如下
* temp+a=0+2=2
*/
int a = 0, b = 0;
b = a++ + ++a; //0+2=2
System.out.println("a:" + a);
System.out.println("b:" + b);
int a1 = 0, b1 = 0;
b1 = ++a1 + a1++; //1+1=2
System.out.println("a1:" + a1);
System.out.println("b1:" + b1);
}
@Test
public void test5() {
/**
* c=0
* temp=c // temp =0
* c=temp+1 // c=1
* c=c+1 // c=2
*
* temp+c=0-2=-2
*/
int c = 0, d = 0;
d = c++ - ++c; //0+2=2
System.out.println("d:" + d);
int i = 0;
i = i++ + ++i; //0+1+1=2
int j = 0;
j = ++j + j++ + j++ + j++;// 1+1+2+3=7
int k = 0;
k = k++ + k++ + ++k;// 0+1+2+1=4
int h = 0;
h = ++h + ++h; // 1+2=3
int p1 = 0, p2 = 0, q1 = 0, q2 = 0;
q1 = ++p1;// p1=1 q1=1
q2 = p2++; // p2=1 q2=0
System.out.println("i:" + i);
System.out.println("j:" + j);
System.out.println("k:" + k);
System.out.println("h:" + h);
System.out.println("p1:" + p1);
System.out.println("p2:" + p2);
System.out.println("q1:" + q1);
System.out.println("q2:" + q2);
}
}
代碼地址:https://github.com/tingliu9/basic-test/blob/master/src/test/java/com/github/tingliu/basic/test/PlusTest.java
文中有些是摘抄別人的,但是忘記出處了。還望見諒