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++ 的區別多線程
好比:ide
int i = 0; int i2 = i++; int j = 0; int j2 = ++j; System.out.println("i2="+i2); System.out.println("j2="+j2);
輸出結果:this
i2=0
j2=1
代碼解析: i++ 是先給 i2 賦值再自身 +1 , 因此 i2 等於 0 , 而 ++j 是先自加等於 1 以後, 再賦值給 j2 , 因此 j2 等於 1 .spa
注意事項線程
++/-- 是非線程安全的, 也就是說 ++/-- 操做在多線程下可能會引起混亂, 例以下面代碼:code
private static int count; public static void main(String[] args) { new Thread(){ @Override public void run() { for (int i = 0; i < 100000; i++){ System.out.println("thread:" + this.getName() + ",count=" + (++count)); } } }.start(); new Thread() { @Override public void run() { for (int i = 0; i < 100000; i++){ System.out.println("thread:" + this.getName() + ",count=" + (++count)); } } }.start(); }
執行的結果,以下圖:blog
如上圖所示,每臺機器的執行結果可能略有差距,但大多數狀況下並不能給咱們想要的真實值200000.
原理分析
"++" 操做在多線程下引起混亂的緣由: 由於 ++ 操做對於底層系統來講, 並非一條 CPU 指令, 而是 三條 CPU 操做指令一一取值, 累加, 存儲, 所以沒法保證原子性, 就會出現上面代碼執行後的偏差.
如何避免 ++/-- 操做在多線程下的"偏差"?
最後, 由於 -- 的語法和 ++ 徹底一致, 因此 -- 的操做, 請參照上面的 ++ 語法.
條件運算符(?:)也叫"三元運算符".
語法:
布爾表達式 ? 表達式 1 : 表達式 2
運算過程: 若是布爾表達式的值爲true, 則返回表達式 1 的值, 不然返回 表達式 2的值.
例如:
String s = 3 > 1 ? "三大於一" : "三小於等於一";
System.out.println(s);
執行結果: 三大於一
在 Java語言中使用條件語句和循環結構來實現流程控制.
條件語句的語法格式:
if(......)......
其中的條件判斷必須使用括號括起來不能省略.
基礎用法使用:
int i = 1; if (i > 1){ System.out.println("i大於一"); }else if (i == 1){ System.out.println("i等於一"); }else { System.out.println("其餘"); }
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);
for 循環是程序中最常使用的循環之一, 它是利用每次迭代以後更新計數器來控制循環的次數.
for 語法格式:
for(int i = 0; i < n; i++){......}
基本語法使用:
for (int i = 0; i < 10; i++){ System.out.println("i = " + i); }
for 循環中可以使用關鍵字 continue , 跳事後續操做, 繼續下一次迭代.
例如:
for (int i = 1; i < 4; i++){ if (i == 2) continue; System.out.println("i=" + i); }
執行結果:
i=1
i=3
如結果所示, 第二次循環就會跳過, 執行下一次循環.