Java的运算符

运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。Java中提供了丰富的运算符,如赋值运算符、算术运算符、比较去处符等。本节将向读者介绍这些运算符。

赋值运算符

赋值运算符以符号“=”表示,它是一个二元运算符(对两个操作数作处理),其功能是否将右方操作数所含的值赋给左方的操作数。例如:

int = 100;

该表达式是将100赋值给变量a。左方的操作数必须是一个变量,而右边的操作数则可以是任何表达式,包括变量(如a、number)、常量(如123、‘book’)、有效的表达式(如45*12)。

使用赋值运算符为变量赋值,实例代码如下:

int a = 10; //声明int型变量a

int b = 5 //声明int型变量b

int c = a+b //将变量a与b运算后的结果赋值给c

遵循赋值运算符的运算规则,可知系统将先计算a+b的值,结果为15,然后将15赋值给变量c,因此="c=15"。

由于赋值运算符"="处理时会先取得右方表达式处理后的结果,因此一个表达式中若含有一两个以上的"="运算符,会从最右方的“=”开始处理。

在项目中创建类Eval,在主方法中定义变量,使用赋值运算符为变量赋值。

public class Eval { // 创建类

public static void main(String[] args) { // 主方法

int a, b, c; // 声明int行变量a,b,c

a = 15; // 将15赋值给变量a

c = b = a + 4; // 将a与4的和赋值给变量b,然后再赋值给变量c

System.out.println("c值为:" + c); // 将变量c的值输出

System.out.println("b值为:" + b); // 将变量b的值输出

}

}

运行的结果如图所示:

运行的结果

运行的结果

说明

在Java中可以把赋值运算符连在一起。如:

x = y = z = 5;

在这个语句中,变量x、 y、 z、都得到同样的值5。但在程序开发中不建议使用这种赋值语句。

算术运算符

Java中的算术运算符主要有+(加)、(减)、*(乘)、/(除)、%(求余),它们都是二元运算符。Java中算术运算符的功能及使用方式如表所示。

Java算术运算符
运算符 说明 实例 结果
+ 12.45f+15 27.45
- 4.56-0.16 4.4
* 5L*12.45f 62.25
/ 7/2 3
% 取余数 12%10 2

其中,“+”和“-”运算符还可以作为数据的正负号,如+5、-7。

注意

在进行除法运算时,0不能做除数。例如,对于语句“inta = 5/0;”,系统会抛出ArithmeticException异常。

下面通过一个小程序来介绍算术运算符的使用方法。

在项目中创建类Arith,在主方法中定义变量,使用算术运算符将变量的计算结果输出。

public class Arith { //创建类

public static void main(String[] args){ //主方法

float number1 = 45.56f; //声明float型变量并赋值

int number2 = 152; //声明int型变量并赋值

System.out.println("和为: "+ number1 + number2); //将变量相加之和输出

System.out.println("差为: "+(number2-number1)); //将变量相减之差输出

System.out.println("积为: "+ number1 * number2); //将变量相乘的积输出

System.out.println("商为: "+ number1 / number2); //将变量相除的商输出

}

}

运行结果如图所示:

使用算术运算符将变量的计算结果输出

使用算术运算符将变量的计算结果输出

自增和自减运算符

自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后,操作元必须是一个整型或浮点型变量。自增、自减运算符的作用是使变量的值增1或减1放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算。放在操作后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。例如:

++a(-a) //表示在使用变量a之前,先使a的值加(减)1

a++(a--) //表示在使用变量a之后,使a的值加(减)1

粗略地分析,++a与a++的作用都相当于a = a+1。 假设 a=4, 则:

b = ++a; //先将a的值加1,然后赋值给b,此时a值为5,b值为5

再看另一个语法,同样假设 a = 4, 则:

b = a++; //先将a的值赋给b,再将a的值变为5,此时a值为5,b 值为 4

比较运算符

比较运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。当运算符对应的关系成立时,运算结果为true,否则为false。所有比较运算符通常作为判断的依据用在条件语句中。比较运算符共有6个,如表所示。

比较运算符
运算符 作用 举例 操作数据 结果
> 比较左方是否大于右方 'a'>'b' 整型、浮点型、字符型 false
< 比较左方是否小于右方 156<456 整型、浮点型、字符型 false
= 比较左方是否等于右方 'c'='c' 基本数据类型、引用型 true
>= 比较左方是否大于等于右方 479>=426 整型、浮点型、字符型 true
<= 比较左方是否小于等于右方 12.45<=45.5 整型、浮点型、字符型 true
!= 比较左方是否不等于右方 'y'!='t' 基本数据类型、引用型 true

在项目中创建类Compare,在主方法中创建整型变量,使用比较运算符对变量进行比较运算,并将运算后的结果输出。

http://www.ie00.net

public class Compare { //创建类

public static void main(String[] args) {

int number1 = 4; //声明int型变量number1

int number2 = 5; //声明int型变量number2

/* 依次将变量number1 与变量 number2 的比较结果输出 */

System.out.println("number1>number的返回值为: "+(number1 > number2));

System.out.println("number1==number2返回值为: "+(number1== number2));

System.out.println("number1!=number2返回值为: "+(number1 != number2));

System.out.println("number1>=number2返回值为: "+(number1 >= number2));

System.out.println("number1 <=number2返回值为: "+(number1 <= number2));

}

}

运行结果如图所示:

使用算术运算符将变量的计算结果输出

运行结果

逻辑运算符

返回类型为布尔值的表达式,如比较运算符,可以被组合在一起构成一个更复杂的表达式。这是通过逻辑运算符来实现的。逻辑运算符包括&(&&)(逻辑与)、||(逻辑或)、!(逻辑非)。逻辑运算符的操作元须是boolean型数据。在逻辑运算符中,除了“!”是一元运算符之外,其他都是二元运算符。表给出了逻辑运算符的用法和含义。

逻辑运算符
运算符 含义 用法 结合方向
&&、& 逻辑与 opl&&op2 左到右
|| 逻辑或 op1||op2 左到右
! 逻辑非 !op 右到左

结果为boolean型的变量或表达式可以通过逻辑运算符组合为逻辑表达式。

用逻辑运算符进行逻辑运算时,结果如表所示。

使用逻辑运算符进行逻辑运算
表达式1 表达式2 表达式1&&表达式2 表达式1||表达式2 !表达式1
true true true true true
true false false true false
false false false false true
false true false true true

逻辑运算符“&&”与“&”都表示“逻辑与”,那么它们之间的区别在哪里呢?从表可以看出当两个表达式都为true时,“逻辑与”的结果才会是true。使用逻辑运算符“&”会判断两个表达式:而逻辑运算符“&&”则是针对boolean类型的类进行判断,当第一个表达式为false时则不会去判断第二个表达式,直接输出结果从而节省计算机判断的次数。通常这种在逻辑表达式中从左端的表达式可推断出整个表达式的值称为“短路”,而那些始终执行逻辑运算符两边的表达式称为“非短路”。“&&”属于“短路”运算符,而“&”则属于“非短路”运算符。

在项目中创建类Calculation,在主方法中创建整型变量,使用逻辑运算符对变量进行运算,并将运算结果输出。

public class Calculation { //创建类

public static void main(String[] args){

int a = 2; //声明int型变量a

int b = 5; //声明int型变量b

//声明boolean型变量,用于保存应用逻辑运算符“&&”后的返回值

boolean result = ((a > b) && (a != b));

//声明boolean型变量,用于保存应用逻辑运算符“||”后的返回值

boolean result2 = ((a > b) || (a != b));

System.out.println(result); //将变量result输出

System.out.println(result2); //将变量result2输出

}

}

运行结果如图所示:

运行结果

运行结果

位运算符

位运算符除按位与和按位或运算符外,其他只能用于处理整数的操作数。位运算是完全针对位方面的操作。整型数据在内存中以二进制的形式表示,如int型变量7的二进制表示是00000000 00000000 00000000 0000111。

1.“按位与”运算

“按位与”运算的运算符为“&”,为双目运算符。“按位与”运算的运算法则是:如果两个整型数据a、b对应位都是1,则结果位才是1,否则为0。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同,如图所示。

2.“按位或”运算

“按位或”运算的运算符为“|”,为双目运算。“按位或”运算的运算法则是:如果两个操作数对应位都是0,则结果位才是0,否则为1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同,如图所示。

5&-4的运行结果

5&-4的运行结果

3|6的结果,十进制表示7

3|6的结果,十进制表示7

3.“按位取反”运算

“按位取反”运算也称“按位非”运算,运算符为“~”,为单目运算符。“按位取反”就是将操作数二进制中的1修改为0,0修改为1,如图所示。

4.“按位异或”运算

“按位异或”运算的运算符是“^”,为双目运算符。“按位异或”运算的运算法则是:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0,否则为1。若一两个操作数的精度不同,则结果数的精度高的操作数相相同,如图所示。

~7的二进制表示,十进制为-8

~7的二进制表示,十进制为-8

10^3的运算过程

10^3的运算过程

移位操作

除了上述运算符之外,还可以对数据按二进制位进行移位操作。Java中的移位运算符有以下3种。

<<:左移。

>>:右移。

>>>:无符号右移。

左移就是将左边的操作数在内存中的二制数据左移右边操作数指定的位数,左边移空的部分补0。右移则复杂一些。当使用“>>”符号时,如果最高位是0,左移空的位就填入0;如果最高位是1,右移空的位就填入1,如图所示。

右移

右移

java还提供了无符号右移“>>>”,无论最高位是0还是1,左侧被移空的高位都填入0。

注意

移位运算符适用的数据类型有byte、short、char、int和long。

技巧

移位可以实现整数除以或乘以2n的效果

三元运算符

三元运算符的使用格式为:

条件式?值1:值2

三元运算符的运算规则为:若条件式的值为true,则整个表达式取值1,否则取值2。例如:

boolean b = 20<45?true:false;

如上例所示,表达式“20<45”的运算结果返回真,那么boolean型变量b取值为true;相反,表达式“45<20”返回为假,则boolean型变量b取值false。

三元运算等价于if...else语句,实例代码如下:

boolean a; //声明boolean型变量

if(20<45) //将20<45作为判断条件

a = true; //条件成立将true赋值给a

else

a = false; //条件不成立将false赋值给a

运算符优先级

Java中的表达式就是使用运算符连接起来的符合Java规则的式子。运算符的优先级决定了表达式中的运算执行的先后顺序。通常优先级由高到低的顺序依次是:

增量和减量运算。

算术运算。

比较运算。

逻辑运算。

赋值运算。

如果两个运算有相同的优先级,那么左边的表达式要比右边的表达式先被处理。表显示了在Java中众多运算符特写的优先级。

运算符的优先级
优先级 描述 运算符
1 括号 ()
2 正负号 +、-
3 一元运算符 ++、-、!
4 乘除 *、/、%
5 加减 +、-
6 移位运算 >>、>>>、<<
7 比较大小 <、>、>=、<=
8 比较是否相等 ==、!=
9 按位与运算 &
10 按位异或运算 ^
11 按位或运算 |
12 逻辑与运算 &&
13 逻辑或运算 ||
14 三元运算符 ? :
15 赋值运算符 =

技巧

在编写程序时尽量使用括号“()”运算符来限定运算次序,以免产生错误的运算顺序。

生活导航友情链接
Mozilla
Netscape Navigator
Konqueror
Epiphany
Galeon
Seamonkey
Dillo
Kazehakase
Netsurf
Camino