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

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

  • 相关阅读:
    分布式缓存Redis
    MySQL优化
    SYSRET
    SYSCALL
    bolt cms V3.7.0 xss和远程代码执行漏洞
    github渗透测试工具库
    Gradle系列之Gradle插件
    fastjson 漏洞利用 命令执行
    linux 关闭对端口的监听
    微信小程序自动化测试最佳实践(附 Python 源码)
  • 原文地址:https://www.cnblogs.com/Night-Watch/p/11719461.html
Copyright © 2011-2022 走看看