算術運算符

算術運算符

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++ 先賦值再自加

好比: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 操做指令一一取值, 累加, 存儲, 所以沒法保證原子性, 就會出現上面代碼執行後的偏差.

如何避免 ++/-- 操做在多線程下的"偏差"?

  • 方法一: ++/-- 操做放在同步塊 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 語法格式:

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

如結果所示, 第二次循環就會跳過, 執行下一次循環.

相關文章
相關標籤/搜索