Java的运算符
在Java语言中支持以下运算符:
算数运算符 | +、-、*、/、++、–、% |
赋值运算符 | = |
关系运算符 | >、<、<=、>=、!=、== |
逻辑运算符 | &&、!、 |
位运算符 | &、、~、^、<<、>>、 |
条件运算符 | ?: |
扩展赋值运算符 | +=、-=、*=、/= |
算数运算符
算数运算符主要功能是对数据进行运算返回结果。除了我们日常中熟知的加减乘除运算之外,计算机中还有取余运算符(模运算符%)、自增(++)、自减(- -)运算符。
取余运算符:顾名思义就是取两个数的余数。例如:
int a;
a=10%20;
得到的结果就是10。
自增、自减运算符:与其他运算符不同的是,该运算符是一元运算符只有一个变量进行运算。
接下来我们看它们的使用
int a=10;
int i=11;
System.out.println(a++);
System.out.println(++a);
System.out.println(i--);
System.out.println(--i);
运行结果:
运行结果中我们看到a开始赋值为10,a++的返回值为10,++a后变成了12。
自增运算符中,++在变量前面会先返回该变量的值在进行运算,++在变量后则相反,先运算在返回。所以,第一次a++返回的是11。但是为什么第二次++a的值是12呢?这是因为在上一次运行中a++已经将a的值加一此时a=11,在经过一次++a得到12。自减运算符的使用与自增运算符一样,就不过多赘述了。
赋值运算符
对于赋值运算符就比较简单,一般都是用于给变量赋值都作用。我们在使用是应当注意左值和右值的区别。简单来说,一般赋值时等号右边的值都是一个常量或者已经初始化过的变量不可能是一个不定的值。而等号左边的值一般都是变量不会是已经确定的常量。不会出现 1=i 这种情况。
关系运算符
关系运算符一般用于判断对错,返回一个布尔型数据。主要包括<、>、>=(大于等于)、<=(小于等于)、!=(不等于)、==(等于)。尤其是等于运算符和赋值运算符的区别。
我们来看以下代码
int a=10;
int b=10;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a>=b);
System.out.println(a<=b);
System.out.println(a!=b);
System.out.println(a==b);
运行结果:
我们看到代码中a是等于b的,所以只有>=,<=,==是正确的返回true,其余错误返回false。
逻辑运算符
逻辑运算符包括&&、||、!对应的含义相当于数字电路中与、或、非的含义。参与逻辑运算必须是布尔型的数据,与关系运算符一样,它们也会返回一个布尔型数据。
&&(与):只有两边都是true才会返回true,当有一边是false时结束运算返回false;
||(或):只有两边都是false才会返回false;
!(非):取反,一元运算符。
例如:
boolean e=true;
boolean f=false;
System.out.println("e&&f:"+(e&&f));
System.out.println("e||f:"+(e||f));
System.out.println("!e:"+!e);
运行结果:
对于&&的使用,我们再来看一段代码:
int a=1;
boolean f=(a>2)&&(a++>2);
System.out.println(a);
代码中,我们将a初始化为1,在执行逻辑运算时&&左边结果为false。这时,逻辑运算就会结束返回一个false给 f ,&&右边将不会执行,所以a的值为1。
位运算符
位运算符包括&(与),|(或),~(取反),^(异或)、<<(左移),>>(右移)。
与其他运算符不同的是,位运算符的运算对象是二进制数据。
例如:
/*
a=00001111;
b=01010101;
a&b=00000101;二进制数据中每一位都进行与运算,有0为0,同1为1
a|b=01011111;有1为1,同0为0,
a^b=01011010;相同为0,相异为1
~a=11110000;按位取反 0为1,1为0
a<<2=00111100;数据向左移动两位,即乘以2
b>>2=01010100;数据向右移动两位,即除以2
*/
条件运算符
条件运算符的格式为;(条件表达式) ? (结果1) : (结果2)
即当条件表达式为真时,整个表达式结果为结果1,否则结果为结果2
例如:
int s=10;
int t = (s > 10) ? (s++) : (s--);
System.out.println(t);
代码中,s赋值为10,然后进行条件运算,并将结果赋值给t,首先判断s>10为假,执行结果二(s–);由于是先返回s在做自减所以得到的值是10。
条件运算中,条件表达式一般会是结合了其他运算符的复合运算。在使用时,要具体分析。
扩展赋值运算值
扩展赋值运算符包括+=、-=、*=、/=。
/*
x+=x; 等同于 x=x+x;
x-=x; 等同于 x=x-x;
x*=x; 等同于 x=x*x;
x/=x; 等同于 x=x/x;
*/
运算符优先级
优先级由高到低排序
分隔符 | ()【】{} |
一元运算符 | ++、– |
算数运算符 | +、-、*、/、% |
移为运算符 | <<、>> |
关系运算符 | <、>、==、!= |
位运算符 | &、、~ |
逻辑运算符 | &&、、! |
条件运算符 | ?: |
赋值运算符 | = |
小结:
在Java中,运算符通常会结合在一起通过复合的方式出现。在设计和分析时,要结合具体问题,实际情况而定。
在使用运算符时要注意运算符的优先级,必要时用括号。