运算符

  • 赋值运算符

等号后的赋值给等号前的,注意在Java中一个等号表示赋值运算,两个等号表示比较是否相等。

1
2
int a=10,b=20;
int t=a;

扩展赋值表达式(+=、-=、*=、/=)

1
2
3
4
5
6
7
8
int num = 91;
int index = num % 5;

int a, b, c;
a = b = c = 100; //整个表达式的值为100

int sum = 100;
sum += 10; //整个表达式的值为100
  • 算数运算符
1
2
3
4
加(+)、减(-)、乘(*)、除(/)、 取余(%)

整数相除,只能取整数部分,小数部分被舍弃。
整数运算时,0不能做除数;浮点运算时,0.0可以,但结果是无穷。

运算时需要考虑数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int a=1,b=2;

System.out.println("****** int与int运算结果是int *******************");
System.out.println( a+b );//此时输出 3
System.out.println( a-b );//此时输出 -1
System.out.println( a*b );//此时输出 2
System.out.println( a/b );//此时输出 0
System.out.println( a%b );//此时输出 1

System.out.println("****** int与double运算结果是double ****************");
int c=1;
double d=2;
System.out.println( c+d );//此时输出 3.0
System.out.println( c-d );//此时输出 -1.0
System.out.println( c*d );//此时输出 2.0
System.out.println( c/d );//此时输出 0.5
//取余推荐int%int ,两个整数取余数
System.out.println( c%d );//此时输出 1.0
/** 下面代码为常见异常 **********************************************************/
// System.out.println( 5/0 ); //java命令运行时抛出异常ArithmeticException: / by zero
//int e=5.0/2; //javac命令编译时产生错误: 不兼容的类型: 从double转换到int可能会有损失
double e1 = 5.0/2;
System.out.println( e1 ); //输出2.5
int e2 = (int)(5.0/2);
System.out.println( e2 ); //输出2
  • 连接符
1
+ 可以实现字符串的连接。同时可以实现字符串与其他数据类型“相连”.
1
2
3
4
5
System.out.println( 1+2+"3" );//第1个输出:33  北京
System.out.println( "1"+2+3 );//第2个输出:"123" 上海 "1"+2 == "12" +3 == "123"
System.out.println( "1"+"2"+(1+2) );//第3个输出: 123 沈阳
System.out.println( "1"+(2+3) );//第4个输出:15 深圳
System.out.println( 1+"2"+3 );//第5个输出:123
  • 关系运算符
1
> 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于
1
2
3
4
//关系表达式的结果为boolean类型(true或false)
int a = 100;
boolean b1 = a > 100; //false
boolean b2 = (a + 1) >= 100; //true
  • 三目运算符
1
2
条件表达式 ? 表达式1 : 表达2;
当条件表达式成立时,执行问号后的表达式1,当条件表达式不成立时,执行冒号后表达式2;
1
2
3
int  a=10,b=20;
int max = a>b?a:b; //当a比b大时max=a. 当a小于等于b时执行max=b;
System.out.println(a + “与” + b + “最大值是”+ max);
  • 自增减运算符

自增(++)、自减(–)只能用于变量,常数不可以.

1
2
3
4
5
6
7
8
9
10
int a=1,b=1;
int x=a++;
int y=--b;

System.out.println("x="+ x);//因为++号在后,所以先执行x=a x=1,在执行a=a+1=2
System.out.println("y="+ y);//因为--号在前,所以先执行b=b-1=0,在执行y=b y=0

int c=1,d=1;
System.out.println("c++ 等于"+ c++);//因为++号在后,所以先打印c的值1,打印后再执行c=c+1=2
System.out.println("--d 等于"+ --d);//因为--号在前,所以先执行d=d-1=0,在打印d的值0
  • 逻辑运算符
1
逻辑运算符:&& 与 || 或 ! 非
1
2
3
4
5
b1       b2     b1 && b2      b1 || b2      !b1
false false false false true
false true false true true
true false false true false
true true true true false
1
2
3
4
5
6
7
8
9
double income = 4000;
boolean b1 = (income >= 3500) && (income < 5000);
System.out.println(b1); //true

int num = 30;
boolean b2 = num < 0 || num > 100;
System.out.println(b2); //false

//“&&”“||” 具备“短路”的特性:如果通过第一个表达式的值即可得出最后的结果,则不计算第二个表达式。
  • 运算符的优先级
运算符 综合性
[]、() 从左向右
! ~ ++ – + - 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <= > >= instance of 从左向右
== != 从左向右
& 从左向右
^ 从左向右
| 从左向右
&& 从左向右
|| 从左向右
?: 从右向左
= 从右向左

if分支结构

1
2
3
4
5
6
7
8
9
10
if( 条件表达式 ){
.... 语句体M ...;
}

... 语句体Z ...;

/*语法解析:
当if后()小括号内条件表达式成立返回true时,执行if后{}花括号内语句体M
当if后()小括号内条件表达式不成立时,if后{}花括号内语句体m不执行。
语句体z与条件无关,条件成立与否都执行。*/

if-else分支结构

1
2
3
4
5
6
7
8
9
10
11
12
13
if( 条件表达式 ){
... 语句体M ...;
}else{
... 语句体N ....;
}

语句体Z...;

/*语句解析
当if()小括号内条件成立时执行if{}花括号内语句体M,
当if()小括号内条件不成立时,执行else{}花括号内语句N.
语句体Z与条件无关,条件是否成立都执行
当if或else后只有一句语句时,{}花括号可省略。*/

if-else if分支结构

1
2
3
4
5
6
7
8
9
10
if(条件表达式1) {
语句块1;
} else if(条件表达式2){
语句块 2;
}… …
else{
语句块n;
}

//当条件表达式为true时,执行对应的语句块,否则执行语句块n