一、运算符
对各种类型的数据进行加工的过程称为运算;
表示各种不同运算的符号称为运算符;
参与运算的数据称为操作数。
按操作数的数目来分,可有:
一元运算符:++、–
二元运算符:+、-、>
三元运算符: ? :
基本运算符按功能划分,有下面几类:
1.算术运算符:+,-,*,/,%,++,– ,例:
2+3 //加法求和,整个表达式值为5
5-2 //减法求差,整个表达式值为3
2*3 //乘法求积,整个表达式值为6
10/2 //除法求商,整个表达式值为5
10%4 //求余,整个表达式值为2
++6 //前自加,在自身数据的基础上+1,整个表达式值为7
6++ //后自加,在自身数据的基础上+1,整个表达式值为7
--6 //前自减,在自身数据的基础上-1,整个表达式值为6
6-- //后自减,在自身数据的基础上-1,整个表达式值为6
10/3 //10除以3,所得值本应为3.33无限循环,但因为10和3都为int类型,所以得到的结果也是一个int类型,3.33无限循环会自动转为int类型,所以这个表达式的值实际为3
2.关系运算符:> , < , >= , <= , == , != ,判断两个表达式或变量间的某种关系是否成立,成立返回true,不成立返回false,举例:
i=3;
j=5;
i>j //比较i是否大于j,因为i为3,j为5,所以这个表达式不成立,返回布尔值false
i<5 //比较i是否小于j,表达式返回布尔值true
i>=5 //比较i是否大于或等于j,表达式返回false
i<=5 //比较i是否小于或等于j,表达式返回true
i==5 //比较i是否等于j,表达式返回false
i!=5 //比较i是否不等于j,表达式返回true
3.逻辑运算符:! , && , || ,只对返回布尔类型的表达式或为布尔类型的变量进行处理,例:
flag=3>5; //3>5 返回false,flag将被赋值为false
!flag; //逻辑非运算符,表达式返回flag的反义,即true
flag&&3<5; //逻辑且运算符,当运算符两端的表达式或变量都为true时,整个表达式才返回true,否则都为false,3<5返回true,但flag的值为false,所以,这个表达式返回false
flag||3<5; //逻辑或运算符,当运算符两端的表达式或变量都为false时,整个表达式才返回false,只要有其中一个为true,整个表达式返回true,flag的值为false,但3<5返回true,所以,这个表达式返回true
4.赋值运算符: = ,以及其扩展赋值运算符,如 +=,-=,*=,/= 等
int i;
i=3; //将i赋值为3
i+=3; //等效于i=i+3
i-=3; //等效于i=i-3
i*=3; //等效于i=i*3
...
5.条件运算符: ? : ,例:
int i=0;
int result;
result = ( i==0 ? 0 : i*10);
//先判断问号前的表达式是否成立,若成立返回问号后的值,否则返回冒号后的值。例子中,i==0成立,整个条件运算表达式返回为0,所以result将被赋值为0
6.位运算符: >> , << , >>> , & , | , ^ , ~ 。适用于运算二进制数
a=10011101;
b=00111001;
a<<3; //等于11101000
a>>3; //等于11110011
a>>>3;
7.其它:
分量运算符"." : System.out.print("Hello World!");
下标运算符"[]": int num=array[2];
实例运算符"instanceof" ;
内存分配运算符"new" ;
...
二、表达式
表达式是由操作数和运算符按一定的语法形式组成的符号序列,一个常量或变量的名字是最简单的表达式,其值即为该常量或变量的值;表达式的值还可以作为其它运算的操作数,形成更复杂的表达式。
表达式的类型,由运算以及参与运算的操作数的类型决定,如:
布尔型表达式:false||true //表达式的类型为布尔类型,返回一个布尔值
整数类型表达式:10/3 //表达式的类型为整数类型,返回一个整数3
运算符的优先次序
一个表达式若含有多个运算符,则这些运算符将按照运算符的优先顺序来被进行运算,整个表达式的运算从高级到低级,同级运算符从左到右进行
int result;
int i=3;
result= (i%2==1 ?1:0)++;
//1.运行()中的运算 2.运行i%2 3.运行?:运算符 4.运行++运算 5.运行=赋值运算,最终result将被赋值为2
System.out.print(i++);//将输出3,先运行print()输出i为3,后运行i++运算,得到4
System.out.print(++i);//将输出5,前一个输出后,i++得到4,这里先运行++i,得到5,后运行print()输出i为5