Java中的操作符

Java运算符和其他语言一样,接收一个或多个参数,产生一个新值。运算符作用的对象是操作数。有些运算符可能会改变操作数自身的值,这被称为副作用,几乎所有的运算符都只能操作基本类型。

Java中的基本运算符

Java中的运算符基本分为六类:算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元/条件运算符。

1.1 算术运算符:

  • 算术运算符包括:+(加)、-(减)、*(乘)、/(除)、%(取余)、++(自增)、--(自减)
  • 其中,+ 运算符也可以用于字符串连接,++-- 既可以出现在操作数的左边,也可以出现在右边,但运行结果是不同的,当其位于操作数前面时,可以将其称之为“前缀式”,其会先执行运算,在生成值;而当其位于操作数后面时,称之为“后缀式”,其会先生成值,在执行运算
    例:
public class Thinking_test1 {
    public static void main(String []args){
        int i=1;
        System.out.println("i="+ i);
        System.out.println("i="+ i++);
        System.out.println("i="+ i);
        System.out.println("i="+ ++i);
    }
}    /*OutPut
	  * i=1
	  * i=1
	  * i=2
	  * i=3
	  */

1.2 赋值运算符:

  • 赋值使用的操作符“=”,它的意思时取右边的值把它赋值给左边。常用的赋值运算有:=(赋值)、+=(加等)、-=(减等)、*=(乘等)、/=(除等)、%=(模等/取余等) 。在赋值运算时右值可以时任意常数、变量或者表达式,但是左边的值必须是一个明确的、已命名的变量。
  • 在对基本类型的变量进行赋值时,基本类型存储了实际的数值,而并非指向一个对象的引用,所有在为其赋值的时候,是直接将一个地方的内容复制到另一边的。而在对一个对象进行操作时,我们真正操作的时对象的引用。这种称为"别名现象",也是Java操作对象的一种基本方式。
    例:
public class Thinking_test2 {
    public static void main(String []args){
       int x = 0, y = 1,z = 2;
       String s=" summed: ";
       x+=y;
       x*=z;
       s+=" (x+y)*z = "+x;
       System.out.println(s);
    }
}    /*Output
	  *  summed:  (x+y)*z = 2
	  */

1.3 关系运算符:

  • 关系操作符生成的是一个 Boolean(布尔) 结果,它们计算的是操作数的值之间的关系。 如果关系是真实的,则生成true(真),否则生成false(假)。关系运算符包括:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(等于)、!=(不等于)、instanceof(对象是否是类的实例)
  • 其中> 、 < 、 >= 、 <= 只支持左右两边操作数是数值类型,== 、 != 两边的操作数既可以是数值类型,也可以是引用类型
public class Thinking_test3{
    public static void main(String []args){
        Integer n1 =10;
        Integer n2 =10;
        System.out.println(n1==n2);
        System.out.println(n1!=n2);

    }
}    /* Output
      *
	  * true
      * false
	  */

1.4 逻辑运算符:

  • 逻辑运算符:&&(短路与)、||(短路或)、^(异或)、&(逻辑与)、|(逻辑或)、!(逻辑非)能根据参数的逻辑关系,生成一个布尔值。
    与:即所有的项都满足
    或:只要有一个项满足即可
    非:将结果取反
    异或:当只有一个项满足时,表达式才满足
    例:
public class Thinking_test4 {
    public static void main(String []args){
        int i=10;
        int j=100;
        boolean k=false;
        System.out.println( i>j || k );
        System.out.println( i<j && k );
        System.out.println( k ^ i<j );
        System.out.println( !k );
    }
}    /* Output
      *
      * false
      * false
      * true
      * true
	  */

1.5 位运算符:

  • 位运算符是将操作数转化位2进制后进行操作的运算符,其包括按位运算符、移位运算符
  • 按位运算符&(按位与)、|(按位或)、^(按位异或)、~(取反)
    这四个运算符和逻辑运算符用法一致,只是将两个十进制变成转换为2进制后,每一位的逻辑运算后,再组成的新的二进制,最后转换为十进制。按位运算符是用来操作整数基本数据类型中的二进制数(bit)。按位操作符会对两个参数中对应位执行布尔代数运算,并生成一个结果。
  • 移位运算符>>(按位右移)、<<(按位左移)
    移位操作符操作运算对象也是二进制的“位”,移位操作符只可用来处理整数类型。其中向左1位相当于操作数的乘2,向右1位相当于操作数除2取商。
public class Thinking_test5 {
    public static void main(String []args){
        int a=3*2*2;
        int b=3<<2;
        int c=12/2/2;
        int d=12>>2;
       System.out.println(a+" "+b+" "+c+" "+d);
    }
}    /* Output
      * 12 12 3 3
	  */

1.6 三元操作符

  • 三元操作符( ? : )也称为条件操作符。虽然? :和if-else效果一致,但是其属于操作符的一种,最终的运算结果是一个值。
  • 其标准表示形式为:布尔表达式 ? 表达式1 :表达式2
    如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值
    例:
public class Thinking_test6 {

    static int ternary(int i){
        return i <10 ? i * 100 : i * 10;
    }

    public static void main(String []args){
       System.out.println(ternary(9));
       System.out.println(ternary(10));
    }
}    /* Output     
      * 900
      * 100  
	  */

表达式进行计算时的优先级

  • 在对表达进行运算时是存在优先级的,所谓优先级就是在表达式运算中的运算顺序。一般来说,单目运算符的优先级较高,赋值运算符的优先级较低。算术运算符的优先级较高,关系和逻辑运算符的优先级较低。当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。
  • 接下来我们列出所有的运算符的优先级以及结合性:
优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 «、»、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 从右向左

猜你喜欢

转载自blog.csdn.net/Lzy410992/article/details/107325040