表达式

  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

  输出结果:

  

原文地址:https://www.cnblogs.com/lqkStudy/p/10986856.html