zoukankan      html  css  js  c++  java
  • 表达式

      Java的表达式由标识符、关键字、常量、运算符、变量等元素构成,对这些元素执行运算并返回某个值。表达式可用于对变量赋值,也可以作为程序控制的条件。

      表达式的运算按运算符的功能分类,可分为以下几类:

    算术运算

      算术运算是对数字数据进行操作。可再分为:

    一元运算

    运算符 用法 描述
    + +op 取正
    - -op 取负
    ++ ++op或op++ 加1
    -- --op或op-- 减1

      ++op(--op)是先令op加1(减1),再求表达式的值;op++(op--)是先求表达式的值,再令op加1(减1)。

    二元运算

    运算符 用法 描述
    + op1+op2
    - op1-op2
    * op1*op2
    / op1/op2
    % op1%op2 求模

      若两个操作数都是整数,则结果是一个整数;若其中一个操作数为浮点数,则结果为浮点数。

    关系运算

      关系运算是两个操作数间的比较,返回结果是一个布尔值,可用于逻辑判断。

    运算符 用法 描述
    < op1<op2 小于
    > op1>op2 大于
    <= op1<=op2 小于等于
    >= op1>=op2 大于等于
    == op1==op2 等于
    != op1!=op2 不等于

    布尔逻辑运算

      布尔逻辑运算用于对布尔型数据进行运算。

    运算符 用法 描述
    && op1&&op2 逻辑与
    || op1||op2 逻辑或
    ! !op 逻辑非

      对于逻辑与运算,若op1为false,则不会对op2进行运算;对于逻辑或运算,若op1位true,则不会对op2进行运算。

    位运算

      位运算用于对整数进行二进制位进行操作。

    运算符 用法 描述
    ~ ~op 按位取反
    & op1&op2 按位与
    | op1|op2 按位或
    ^ op1^op2 按位异或
    << op1<<op2 左移
    >> op1>>op2 带符号数右移
    >>> op1>>>op2 无符号数右移

      若操作数的类型为byte型、short型或int型,则位运算的结果为int型;若操作数类型为long型,则位运算的结果为long型。

      按位取反、按位与、按位或、按位异或运算可以用于布尔型数据,与逻辑运算不同的是,位运算需要对op1和op2都进行运算,最后再进行位运算。

    条件运算

      条件运算使用一个三元运算符(?:),用法为:expression ? op1 : op2(op1和op2的类型要一致)。表示若expression的布尔值为true,则对op1进行运算,否则对op2进行运算。

    类型转换运算

      类型转换运算是把某种类型的数据转换为另一种类型的数据,用法为:(type) op。

      位数少的数据转换为位数多的数据不会造成信息丢失,而位数多的数据转换为位数少的数据则会导致丢失信息或精度下降。

    assert运算

      assert运算用于断言,格式为:assert expression [: msg]。

      若expression为true则继续执行之后的程序,否则抛出AssertionError错误,可以指定错误信息msg。

    instanceof运算

      instanceof运算用于判断对象的类型,返回布尔值,格式为:obj instanceof type。

      obj为一个引用类型对象,type必须为obj类型的父类或子类。

    new运算

      new运算用于对象的实例化和初始化。格式为:new constructor。

      constructor是对应类的构造方法。

    测试

    一元运算

      y=++x和y=x++的区别。

     1 @Test
     2 void testUanry() {
     3     int x, y;
     4     x = y = 0;
     5     y = ++x;   // 等同于 x = x + 1;  y = x;
     6     System.out.println("y = ++x = " + y);
     7     System.out.println("x = " + x);
     8     System.out.println();
     9     x = y = 0;
    10     y = x++;   // 等同于 y = x;  x = x + 1;
    11     System.out.println("y = x++ = " + y);
    12     System.out.println("x = " + x);
    13 }
    testUanry

      输出结果:

      

    二元运算

      两个整数的运算和一个整数、一个浮点数的运算。

    1 @Test
    2 void testBinary() {
    3     int a = 11;
    4     int b = 2;
    5     System.out.println(a + " / " + b + " = " + (a / b));
    6     float c = 2.0f;
    7     System.out.println(a + " / " + c + " = " + (a / c));
    8 }
    testBinary

      输出结果:

      

    布尔型数据的逻辑运算和位运算

      逻辑与运算与按位与运算的区别。

    1 @Test
    2 void testLogicVSBitwise() {
    3     int x = 1;
    4     System.out.println(false && (x++ > 2));   // 逻辑与运算不会执行x++
    5     System.out.println("x = " + x);
    6     x = 1;
    7     System.out.println(false & (x++ > 2));   // 按位与运算会执行x++
    8     System.out.println("x = " + x);
    9 }
    testLogicVSBitwise

      输出结果:

      

    assert运算

    1 @Test
    2 void testAssert() {
    3     int a = 11;
    4     assert a > 10 : "a <= 10";
    5     System.out.println("a > 10");
    6     a = 10;
    7     assert a > 10 : "a <= 10";
    8     System.out.println("a > 10");
    9 }
    testAssert

      输出结果:

      

      

    instanceof运算

    1 @Test
    2 void testInstanceof() {
    3     Number i = 1.0f;
    4     System.out.println(i instanceof Serializable);   // 父类或父接口
    5     System.out.println(i instanceof Byte);   // 子类或子接口
    6     System.out.println(i instanceof Float);
    7 }
    testInstanceof

      输出结果:

      

  • 相关阅读:
    网站服务器架构设计
    使用同步或异步的方式完成 I/O 访问和操作(Windows核心编程)
    堆栈上的舞蹈之释放重引用(UAF) 漏洞原理实验分析
    内核模式下的线程同步的分析(Windows核心编程)
    用户模式下的线程同步的分析(Windows核心编程)
    Linux下部署Django项目
    HDU 2075 A|B?
    HDU 2052 Picture
    HDU 2024 C语言合法标识符
    HDU 2026 首字母变大写
  • 原文地址:https://www.cnblogs.com/lqkStudy/p/10986856.html
Copyright © 2011-2022 走看看