3.2 运算符与表达式

3.2.1 运算符

  • 算术运算符: +,―,*,/,%,++,--
  • 关系运算符: >,<,>=,<=,==,!=
  • 逻辑运算符: !,& , | , ^ , &&,||
  • 位运算符: &,|,^,~ ,>>,<<,>>>
  • 赋值运算符: = 扩展赋值运算符:+=,―=,*=,/=
  • 字符串连接运算符: +

算术运算符

  • +,―,*,/,%,++,――
  • 有关/ 15/4 (整除)15.0/2(实数除法)
  • 有关% 100%3 100%-3 -100%-3 -100%3
  • 有关%的含义偶数a %2, 整除a%7, 个位a%10
  • 有关++, --a=5; a++; b=a*2
  • a=5; b = ++ a *2;
  • a=5; b = a++ *2;
  • ^不是乘方

逻辑运算符(1)

  • 逻辑运算符功能
  • !逻辑非& 逻辑与| 逻辑或
  • ^ 逻辑异或&& 短路与|| 短路或
  • 逻辑运算符功能说明:

逻辑运算符(2)

  • 短路(short-circuit)逻辑运算符
  • && --第一个操作数为假则不判断第二个操作数
  • || --第一个操作数为真则不判断第二个操作数
  • MyDated;

    if ((d!=null) && (d.day>31)) {
      //do something with d
    }
    if(i<0 || i>31 ) {
      System.out.println("非法赋值");
    }

 位运算符

  • 位运算符功能
  • ~ 取反& 按位与| 按位或^ 按位异或
  • 位运算符功能说明:

 

移位运算符(1)

  • 左移

    "a<<b; "将二进制形式的a逐位左移b位,最低位空出的b位补0;

  • 带符号右移

    "a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;

  • 无符号右移

    "a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0。

移位运算符(2)

  • 移位运算符性质

    适用数据类型:byte、short、char、int、long
    对低于int型的操作数将先自动转换为int型再移位(整型提升,对所有的运算都是这样)
    对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数
    对于long型整数移位时a>>b,则是先将移位位数b对64取模

移位运算符(3)

 移位运算符应用举例:

public class BitwiseOperators{
    public static void main( String args[] ){
        int a = 0b1100;
        int b = 0b1010;
        print("a  ",a);
        print("b  ",b);
        print("a&b",a&b);
        print("a|b",a|b);
        print("a^b",a^b);
        print("~a",~a);
        print("a<<2",a<<2);
        print("a>>2",a>>2);
        print("a>>>2",a>>>2);
    }
    static void print(String prefix, int n ){
        String s = Integer.toBinaryString(n);
        while(s.length() < 4) s= "0"+s;
        System.out.println(prefix + " " + s);
    }
}

赋值运算符(1)

赋值运算符=
  当“=”两侧的数据类型不一致时,可以适用默认类型转换或强制类型转换(casting)原则进行处理
  long l = 100;
  inti= (int)l;
  特例:可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
  byte b = 12; //合法
  byte b = 4096; //非法

扩展赋值运算符

字符串连接运算符+

  • "+" 除用于算术加法运算外,还可用于对字符串进行连接操作

    inti= 300 +5;
    String s = "hello, " + "world!";

  • "+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接

    inti= 300 +5;
    String s = "hello, " + i+ "号";
    System.out.println(s); //输出:hello, 305号

  • 该运算符大大简化了字符串的处理

3.2.2 表达式

  • 表达式是符合一定语法规则的运算符和操作数的序列

    a
    5.0 + a
    (a-b)*c-4
    i<30 && i%10!=0

  • 表达式的类型和值

    对表达式中操作数进行运算得到的结果称为表达式的值
    表达式的值的数据类型即为表达式的类型

  • 表达式的运算顺序

    首先应按照运算符的优先级从高到低的顺序进行
    优先级相同的运算符按照事先约定的结合方向进行

运算符优先级与结合性

  • 适当使用括号

表达式中的类型转换

  • 当有不同种类的混合运算时:
  • int→long→float→double
  • 整型提升

    所有的byte, short, char 参与算术运算等转为int

查看反汇编的代码
  使用javap –c 类名

(本页内容摘自:https://www.icourse163.org/learn/PKU-1001941004?tid=1002731007#/learn/content?type=detail&id=1003758031&sm=1)

猜你喜欢

转载自www.cnblogs.com/zjcao/p/9194430.html