关于Java的算术运算符

  1. +求和
  2. -相减
  3. *相乘
  4. /除以
  5. %取余
  6. ++自加1
  7. --自减1

一个表达式中有多个运算符,运算符也有优先级,需要优先的请添加括号()

示例

public class  Main {
    public static void main(String[] args) {

      int i = 10;
       int y = 3;
       System.out.println( i + y);//13
       System.out.println( i - y);//7
       System.out.println( i * y);//30
       System.out.println( i / y);//3
       System.out.println( i % y);//1

    }

}

++运算符的示例下面以下是一个比较容易误导的值

public class  Main {
    public static void main(String[] args) {
       int k = 10;
       int b = k++;
       System.out.println(k);
       System.out.println(b);
    }

}

当++运算符出现在变量后先做赋值运算,在对变量中保存的值进行自加1
所以这是运行出来的结果为k=11,b=10
相反,如果++运算符是在变量的前面例如:int b = ++k;这时是变量先自加1在进行给b变量赋值,这时运行k和b的结果都为11

关系运算符

  1. > (大于)
  2. >=(大于等于)
  3. <(小于)
  4. <=(大于等于)
  5. ==(等于)
  6. !=(不等于)

逻辑运算符

  1. & 逻辑与(并且)
  2. | 逻辑或(或者)
  3. ! 逻辑非(取反)
  4. && 短路与
  5. || 短路或

所有的逻辑运算符要求两边都是布尔类型
true & true ————> true

逻辑与

对于逻辑运算符来说只要一边为false结果就是false
只有两边全是true结果才是true

public class  Main {
    public static void main(String[] args){
       System.out.println(false & false);//false
       System.out.println(true & true);//true
       System.out.println(false & true);//false
    }

}

以下代码就可以表示
System.out.println( 100 > 98 & 100 > 101);
100大于98并且100大于101,很显然右边的是false所以返回false
相反System.out.println( 100 > 98 & 100 < 101);
100大于98并且100小于101,两边都为true,结果返回就是true

逻辑或

逻辑或就是只要有一边为true结果返回就是true
System.out.println( 100 > 98 | 100 > 101);
100大于98并且100大于101,右边的值已经为true所以返回true

逻辑非

public class  Main {
    public static void main(String[] args){
       System.out.println(!false);//true
       System.out.println(!true);//false
    }

}

!false不是假的,那就是真的
!true不是真的,那就是假的

短路与

public class  Main {
    public static void main(String[] args){
        int x = 10;
        int y = 11;
        System.out.println(x > y & x > y++);//false
        //这里发现使用这个逻辑与y的值变成了12说明这是时候右边的表达式y++也运行了
        System.out.println(y);//12

        int t = 10;
        int r = 11;
        System.out.println(t > r && t > r++);//false
        //这里发现使用这个短路与r++并没有运行
        System.out.println(r);//11
    }

因为逻辑与的运算只有两边都为true结果返回true,上边示例左边的表达试左边已经是false所以右边的就没有必要再次运行,这样效率会更高
这里注意的确短路与比逻辑与效率好但是不排除有特殊情况后面的代码也需要运行,具体看自己的业务要求

短路或

短路或是只要有一边为true的时候结果就是true,与短路与相似,这里不做多解释

赋值运算符

  1. 赋值运算符包括“基本赋值运算符”和“扩展赋值运算符”:基本的,扩展的。
  2. 基本赋值运算符:=
  3. 宽展的赋值运算符:+=,-=,*=,/=,%=

基本运算符:=

public class  Main {
    public static void main(String[] args){
        int i = 10;
        //重新赋值
        i = 20;
        byte b = 10;
        b = 20;
    }

}

扩展运算符:+=

其实只要说了+=其他的扩展运算符没必要再说了

public class  Main {
    public static void main(String[] args){
        int i = 10;
        i += 20;
        System.out.println(i);//30
    }

}

这里+=就是就是i = i + 20
如果是-=同理i = i - 20

使用扩展赋值运算的时候,永远不会改变运算结果的类型

public class  Main {
    public static void main(String[] args){
        byte i = 100;
        i = i + 1;//编译报错
        i += 1;
       System.out.println(i);//101
    }

}

i = i + 1;因为1是int类型运算出来的结果是int类型,int大类型不能直接转为byte小类型,所以导致编译报错,这样可以得出=,+=两者不相同只是相似。
i += 1;其实这个方法就等于i = (byte) (i + 1);加了一个强制类型转换符,把int类型转为byte在进行赋值

条件运算符(三目运算符)

  1. 语法格式:布尔表达式 ? 表达式1 : 表达式2

执行原理

布尔表达式结果true时,表达式1的执行结果作为整个表达式的结果
布尔表达式结果false时,表达式2的执行结果作为整个表达式的结果

示例

public class  Main {
    public static void main(String[] args){
        boolean sex = true;
        char c = sex ? '男':'女';
        System.out.println(c);//男
    }

}

这里这一下为什么char c = sex ? '男':'女';为什么会有这char c =因为后面的表达式为char类型'男',所以变量也需要是char类型
System.out.println(sex ? '男':'女');这个是可以的System.out.println();这里面的数据可以是任何类型

连接符

  1. +运算符

作用

  1. 求和
  2. 字符串拼接
什么时候求和?什么时候字符串拼接呢?

当+运算符两边都是数字的时候进行求和
当+运算符一边边都是字符串的时候进行拼接

示例

public class  Main {
    public static void main(String[] args){
       int sex = 100;
        System.out.println("年龄="+ sex);//年龄=100
        System.out.println(100 + sex);//200
        System.out.println(100 + (sex + "200"));//100100200
    }

}