算術運算符
Java 中的算術運算符,包括以下幾種:
算術運算符 | 名稱 | 舉例 |
---|---|---|
+ | 加法 | 1+2=3 |
- | 減法 | 2-1=1 |
* | 乘法 | 2*3=6 |
/ | 除法 | 24/8=3 |
% | 求余 | 24%7=3 |
++ | 自增1 | int i=1;i++ |
-- | 自減1 | int i=1;i-- |
我們本講要重點講的是 “++” 和 “--”,其他的算術運算符相對比較簡單直觀,本講就不花精力去講解了,之所以要把 “++” 和 “--” 單獨拿出來講,是因為在使用他們的時候有很多坑需要開發者注意,最重要的是 “++” 和 “--” 也是面試中高頻出現的面試題。
先來看 “++” 的基本使用:
int i = 1;
int i2 = ++i; // ++i 相當于 i = 1+i;
System.out.println(i); // 2
System.out.println(i2); // 2
++i
和 i++
的區別
-
++i
先自加再賦值 -
i++
先賦值再自加
比如:
int i = 0;
int i2 = i++;
int j = 0;
int j2 = ++j;
System.out.println("i2=" + i2);
System.out.println("j2=" + j2);
輸出的結果:
i2=0
j2=1
代碼解析:i++
是先給 i2 賦值再自身 +1 ,所以 i2 等于0,而 ++j
是先自加等于 1 之后,再賦值給 j2,所以 j2 等于 1。
注意事項
++/-- 是非線程安全的,也就是說 ++/-- 操作在多線程下可能會引發混亂,例如下面代碼:
new Thread() {@Overridepublic void run() {for (int i = 0; i < 100000; i++) {System.out.println("thread:" + this.getName() + ",count=" + (++count));}}
}.start();
new Thread() {@Overridepublic void run() {for (int i = 0; i < 100000; i++) {System.out.println("thread:" + this.getName() + ",count=" + (++count));}}
}.start();
執行的結果,如下圖:
如上圖所示,每臺機器的執行可能略有差距,但大多數情況下并不能給我們想要的真實值 200000。
原理分析
“++” 操作在多線程下引發混亂的原因:因為 ++ 操作對于底層操作系統來說,并不是一條 CPU 操作指令,而是三條 CPU 操作指令——取值、累加、存儲,因此無法保證原子性,就會出現上面代碼執行后的誤差。
如何避免 ++/-- 操作在多線程下的“誤差”?
- 方法一:++/-- 操作放在同步塊 synchronized 中。
- 方法二:自己申明鎖,把 ++/-- 操作放入其中。
- 方法三:使用 AtomicInteger 類型替代 int 類型。
最后,因為 -- 的語法和 ++ 完全一致,所以 -- 的操作,請參照上面的 ++ 語法。
條件運算符(三元運算符)
條件運算符(?:)也叫“三元運算符”。
語法:
布爾表達式 ? 表達式1 :表達式2
運算過程:如果布爾表達式的值為 true,則返回 表達式 1 的值,否則返回 表達式 2 的值。
例如:
String s = 3 > 1 ? "三大于一" : "三小于一";
System.out.println(s);
執行結果:三大于一
。
流程控制
在 Java 語言中使用條件語句和循環結構來實現流程控制。
1 條件語句
條件語句的語法格式:
if(......) ......
其中的條件判斷必須使用括號括起來不能省略。
基礎用法使用:
int i = 1;
if (i > 1) {System.out.println("i大于一");
} else if (i == 1) {System.out.println("i等于一");
} else {System.out.println("其他");
}
2 循環
while 當條件成立的時候執行下一條語句。
while 語法格式:
while(......) ......
基本語法使用:
int i = 0;while (i < 3) {System.out.println(++i);
}
while 是先判斷再決定是否執行,有可能一次也不執行,如果希望至少執行一次,可以使用 do/while。
do/while 語法格式:
do{......}while(......);
基本語法使用:
int i = 0;
do {System.out.println(++i);
} while (i < 3);
3 確定循環
for 循環是程序中最長使用的循環之一,它是利用每次迭代之后更新計數器來控制循環的次數。
for 語法格式:

喜歡的朋友記得點贊、收藏、關注哦!!!