Java常见的运算符
+(加) ,-(减),*(乘),/(除),%(求余)
算术运算规则
两个数字做 算术运算的时候,满足以下规则
如果两个数中有 double 类型,结果一定是double类型
如果两个数中有float类型,结果一定是float类型
如果两个数中有long类型,结果一定是long类型
赋值运算符
=(赋值) += , -= , *= , /=, %=
赋值运算符(除=) 不会提升变量的数据类型
一元运算符
a++ a–
++a --a
a++ 或者 ++a 都可以即作为 语句,也可以作为表达式来使用
a++ : 先计算 a++ 表达式的值,表达式的值等于a的值, 再对a自增1
++a : 先对 a 自增1, 在计算 ++a 表达式的值, 表达式的值等于a的值
int a = 5 ;
int b = (a–) + (–a) + (a–) ;
关系运算符
, >= , < , <= , == , !=
1
关系运算符是一个表达式、返回的结果是 boolean 类型
关系运算符常用来做条件判断
6 > a > 3 (语法错误的), a > 3, a < 6
逻辑运算符
&& (逻辑与) , || (逻辑或) , !(逻辑非)
& (逻辑与) , | (逻辑或)
逻辑运算符是一个表达式、返回的结果是 boolean 类型
逻辑运算符常用来做条件判断
a > 3 && a < 6 (正确写法)
&& 和 || 会产生短路现象, &和| 不会产生短路
&& :一假即假, 当第一个表达式为假的时候,那么第二个表达式不参与运算
|| : 一真即真, 当第一个表达式为真的时候,那么第二个表达式不参与运算
通常推荐使用 && 和 ||
位运算符
位运算只能应用于整数类型
主要是通过二进制进行运算的
位运算的运算速度是最高效的
& (位与) ,| (位或) , ~(位非) ,^ (异或)
1
在位运算中,我们可以简单的把1就理解为true,0理解为 假
& :相同位 如果有0,结果为0,否则为1
| :相同位 如果有1,结果为1,否则为0
~ :按位取反,原来是1 变为0,原来是0变为1
^ : 相同位 不同结果为1,否则为0;
位移运算符
位移运算只能应用于整数类型
主要是通过二进制进行运算的
位移运算的运算速度是最高效的
<<(左移) , >>(右移), >>>(无符号右移)
5
0000 0000 0000 0000 0000 0000 0000 0101
-4
1111 1111 1111 1111 1111 1111 1111 1100
左移:一个数的二进制向左边移动指定位数,在低位补0
右移: 一个数的二进制向右边移动指定位数,在高位正数补0,负数补1
无符号右移:一个数的二进制向右移动指定位数,在高位补0
三元运算符
是一个表达式 , 不能单独使用
语法:exp ? exp1 : exp2
exp表达式 必须是一个 返回 boolean的表达式
当exp表达式为true
程序流程控制
-
顺序控制流程:一个原则:程序从左到右,从上到下执行。
-
选择控制流程:
|-- 单分支
if (条件) {
// 条件满足,则执行{}内的代码
}
|-- 双分支
if(condition) {
// 条件满足,则执行if内的代码
} else {
// 条件不满足的情况下,执行else中的代码
}
|-- 多(三)分支
if (condition1) {
// 条件1满足,则执行这儿的代码
} else if (condition2) {
// 条件2满足,则执行这儿的代码
}…
else if (conditionN) {
// 条件N满足,则执行这儿的代码
} else {
// 剩余的所有条件
}
switch语句
过多地使用嵌套的if语句会使程序很难阅读。Java提供switch语句来有效地处理多重条件的问题。
switch (switch表达式) {
case 值1 : 语句1;
break;
case 值2 : 语句2;
break;
…
case 值N : 语句N;
break;
default : 默认情况下执行的语句;
}
3.循环控制流程:循环是用来控制语句块重复执行的一种结构。
for循环语句:
循环四要素:循环初始化,循环继续条件,循环体,循环迭代/步长/周期。
for循环格式:
for (初始化; 继续条件; 迭代) {
循环体语句;
}
while循环:
循环初始化
while (循环继续条件) {
循环体语句;
循环迭代;
}
do while循环:
do {
// 循环体
//循环迭代;
} while(循环继续条件);
常常用于人机交互:先进行交流,再判断条件。
4.关于死循环:常常用于一些事件,一直等待事件的发生,只要发生就响应。比如用户的登录。
条件永远满足,导致循环永远执行,死循环
while(true) {
}
for (;true;) {
}