算术运算符

算术运算符

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

如结果所示, 第二次循环就会跳过, 执行下一次循环.

相关文章
相关标签/搜索