zoukankan      html  css  js  c++  java
  • 算术运算符

    算术运算符

    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 .

    注意事项

    ++/-- 是非线程安全的, 也就是说 ++/-- 操作在多线程下可能会引发混乱, 例如下面代码:

        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();
        }

    执行的结果,如下图:

       如上图所示,每台机器的执行结果可能略有差距,但大多数情况下并不能给我们想要的真实值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

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

  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/Night-Watch/p/11719461.html
Copyright © 2011-2022 走看看