在程序中经常出现一些特殊符号,如+、- 、*、/、=、>等,这些特殊符号称作运算符。运算符用于对数据进行算术运算、赋值和比较等操作。在Java中,运算符可分为算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和条件运算符。
在数学运算中最常见的就是加减乘除,被称作四则运算。Java中的算术运算符就是用来处理四则运算的符号,这是最简单、最常用的运算符号。接下来通过一张表来展示Java 中的算术运算符及其用法。
算术运算符看上去都比较简单,也很容易理解,但在实际使用时还有很多需要注意的问题,接下来就针对其中比较重要的几点进行详细讲解,具体如下。
1.在进行自增(+ +)和自减(- -)的运算时,如果运算符(+ +或- -)放在操作数的前面则是先进行自增或自减运算,再进行其他运算。反之,如果运算符放在操作数的后面则是先进行其他运算再进行自增或自减运算。
请仔细阅读下面的代码块,思考运行的结果。
int a = 1;
int b = 2;
int c = a +b++;
System.out.println("b="+b);
System.out.println("c="+c);
上面的代码运行结果为:
b=3
c=3
在上述代码中,定义了三个int类型的变量a、b、c,其中a=1、b=2。当进行“ a + b + + ” 运算时,由于运算符+ +写在了变量b的后面,会先运算再自增,因此变量b在参与加法运算时其值仍然为2,c的值应为3,变量b在参与运算之后会进行自增,因此b的最终值为3。
2.在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有小数参与,得到的结果会是一个小数。例如,2510 / 1000属于整数之间相除,会忽略小数部分,得到的结果是2,而2.5 / 10的结果为0.25。
请思考下面表达式的结果是多少?
3000/1000*1000
上面表达式的运行结果为3000。
由于表达式的执行顺序是从左到右,所以先执行除法运算3000 / 1000,得到结果为3,再乘以1000,得到的结果自然就是3000。
3.在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。例如,(-5)%3的结果为-2,而5%(-3)的结果为2。
简单的说赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。我们通过一张表来展示Java中的赋值运算符及其用法。
在赋值过程中,运算顺序从右往左,将右边表达式的结果赋值给左边的变量。在赋值运算符的使用中,需要注意以下两个问题。
1.在Java中可以通过一条赋值语句对多个变量进行赋值,具体示例如下:
int x,y,z;
x=y=z=1; //为三个变量同时赋值
在上述代码中,一条赋值语句将变量x,y,z的值同时赋值为1。需要特别注意的是,下面的这种写法在Java中是不可以的。
int x = y = z = 1; //这样写是语法错误的,因为没有预先声明变量y,z的数据类型
2.在表中,除了=,其他的都是特殊的赋值运算符,以+=为例,x += 3就相当于x=x + 3,首先会进行加法运算x + 3,再将运算结果赋值给变量x。其余的- =、* =、/=、%=赋值运算符都可依此类推。
比较运算符用于对两个常量或变量的大小进行比较,其结果是一个布尔值,即true或 falseo接下来通过下表来展示Java中的比较运算符及其用法。
在使用比较运算符是,需要注意一个问题,不能将比较运算符==误写成赋值运算符=。
逻辑运算符用于对布尔类型的值或表达式进行操作,其结果仍是一个布尔值。接下来通过下表来展示Java中的逻辑运算符及其用法。
1.逻辑运算符可以针对结果为布尔值的表达式进行逻辑运算。例如,5 > 3 & & 1!=0 的结果为true。
2.运算符&和& &都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为f小e。当运算符&和& &的右边为表达式时,二者在使用上还有一定的区别。在使用&进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用& &进行运算,当左边为false时,右边的表达式不会进行运算,因此& &被称作短路与。
接下来通过一个案例来深人了解二者的区别,如下例:
public class Test{
public static void main(String[] agrs){
int x = 0; //定义变量x,初始值为0;
int y = 0; //定义变量y,初始值为0;
int z = 0; //定义变量z,初始值为0;
boolean a,b; //定义boolean变量a和b;
a=x>0&y++>1; //逻辑运算符&对表达式进行运算,然后将结果赋值给a;
System.out.println("a="+a);
System.out.println("y="+y);
b=x>0&&z++>1; //逻辑运算符&&对表达式进行运算,然后将结果赋值给b;
System.out.println("b="+b);
System.out.println("z="+z);
}
}
运行结果:
a = false
y = 1
b = false
z = 0
该程序中定义了三个整型变量x、y、z,初始值都为0,同时定义了两个布尔类型的变量 a和b。在程序中的第7行代码使用&运算符对两个表达式进行运算,左边表达式x>0的结果为false,这时无论右边表达式y++>0的比较结果是什么,整个表达式x>0 & y十+ > 1 的结果都会是false。由于使用的是单个的运算符&,运算符两边的表达式都会进行运算,因此变量y会进行自增,整个表达式运算结束时y的值为1。实例中的第10行代码是短路与运算,运算结果和第7行代码一样为false,区别在于使用了短路与& &运算符,当左边为false时,右边的表达式不再进行运算,因此变量z的值仍为0。
位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字0和1进行操作的。
从表中可以看出,Java中的位运算符本质都是针对二进制数0和1进行运算的,所以,在使用位运算符时,都会先将操作数转换成二进制数的形式进行位运算,然后将得到的结果再转换成想要的进制数。
条件运算符也称为三目运算符(或三元运算符),是由符号?:组合构成,其语法格式如下:
(boolean_expr)? ture_statement : false_statement;
上述条件运算符的运算规则是:先对布尔类型的表达式boolean_expr求值,如果结果为true,就执行冒号(:)前面的表达式true_statement,否者执行后面的表达式false_statement。
在对一些比较复杂的表达式进行运算时,要明确表达式中所有运算符参与运算的先后顺序,通常把这种顺序称作运算符的优先级。接下来通过下表来展示Java中运算符的优先级,其中数字越小表示优先级越高。
分析下面代码的运行结果:
int a = 2;
int b = a+3*a;
System.out.println(b);
运行结果:
8
由于运算符兴的优先级高于运算符+和=,因此先运算3*a,得到的结果是6,再将6与a相加,最后通过运算符=赋值给变量b,得到最后的结果8。
试着分析下面代码运行顺序的优先级和运行结果:
public class Test {
public static void main(String[] args) {
int m = 5;
int n = 7;
int x = ( m * 8 / ( n + 2 ) ) % m ;
System.out.println("m:" + m);
System.out.println("n:" + n);
System.out.println("x:" + x);
}
}
答案见下期尾部!
上期答案:
public class HelloWorld{
public static void main(String[] args) {
final String male="男";
final String female="女";
System.out.println(male);
System.out.println(female);
}
}
运行结果:
男
女