JAVA 运算符与程序控制流程
运算符
运算符包含算术运算符、关系运算符、逻辑运算符、自加和自减运算符、赋值运算符、三元(目)运算符、位运算符
1.算术运算符
Java中算术运算符包含:+、 -、 *、 /、 %,分别为加法、减法、乘法、除法、求模(取余)完全符合数学规则。
2.关系(比较)运算符
关系(比较)运算符包含>、<、>=、<=、==、!=,分别为小于、大于、小于等于、大于等于、等于、不等于运算符,关系运算符的最终结果是一个boolean值
3.逻辑运算符
逻辑运算符包含&&、||、!,分别为与、或、非,其中逻辑与运算符当且仅当两个操作数都为真,条件才为真;逻辑或操作符,如果任何两个操作数任何一个为真,条件为真;逻辑非运算符,用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
4.自加和自减运算符
自加和自减运算符包含++、–,分别位自加和自减运算符,皆为一元运算符,而自加和自减运算符又可以用于数值变量之前或者之后。两处使用差别:
”++“和”–“用于数值变量之前,在赋值操作中,先对被”++“或”–“操作变量值先加1或者先减1,然后在进行其他的操作;
"++"和”–“用于数值变量之后,在赋值操作中,先用被”++“或”–“的操作变量值进行其他的操作,然后在对其值加1或者减1。
public class Test {
public static void main(String[] args) {
int a=0;
System.out.println(a++);
System.out.println(++a);
}
}
结果为
0
2
第一次控制台输出语句先输出 a 再做 a 自加,故先输出0,这行代码执行完后 a 值为1。
第二次控制台输出语句先做 a 自加再输出 a ,故先做 a = a + 1; 后 a 值为2,然后输出 a。
自减同理。
注意:自加算符,不管是前加加还是后加加,本质上对应运算的变量,肯定要加1;自减也类似,前加加和后加加最大的不同之处是就是,前加加的优先级别特别的高,后加加的优先级别特别的低。
5.赋值运算符
= // 将等号右侧的值赋予左侧
+= // int a = 10 a += 20; <==> a = a + 10
-= // int a = 10 a -= 2; <==> a = a - 2
*= //int a = 10 a *= 2; <==> a = a * 2
/= //int a = 10 a /= 2; <==> a = a / 2
%= //int a = 10 a %= 2; <==> a = a % 2
6.三目运算符
变量 = 表达式是否成立?第一个值:第二值
public class Test {
public static void main(String[] args) {
int a = 2;
a = (a>0)?5:10;
System.out.println(a);
a = (a<0)?5:10;
System.out.println(a);
}
}
结果输出
5
10
第一个三目运算 a 值为2, a>0 为真,故把第一个值即5赋值给 a,输出5.
第二个三目运算 a 值为5, a<0为假,故把第二个值即10赋值给 a,输出10
7.位运算
java支持的位运算符:
&:按位与。
|:按位或。
~:按位非。
^:按位异或。
<<:左位移运算符。 >>:右位移运算符。<<<:无符号右移运算符。
注意:当移位的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型!!
位运算符中,除 ~ 以外,其余均为二元运算符。操作数只能为整型和字符型数据。
计算机中数字以补码储存,因为原码和反码计算不准确,而补码是准确的。 Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。
原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
反码:正数的反码还是等于原码,负数的反码就是他的原码除符号位外,按位取反。
补码:正数的补码等于他的原码,负数的补码等于反码+1。
程序控制流程
1.顺序
如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,直到程序的最后。
2.选择结构
单分支:
if (条件) {
// 如果条件为真,则执行{}内部的代码,否则跳过不执行,顺序执行单分支后的语句
}
双分支:
if (condition) {
// 如果条件为真,则执行if内部的代码
} else {
// 如果条件为假时,则执行else内部的代码
}
多分支:
if (条件1) {
// 如果条件1为真,则执行内部的代码
} else if (条件2) {
// 如果条件2为真,则执行内部的代码
} else if (条件3) {
// 如果条件3为真,则执行内部的代码
} ...
else {
多分支中else可加可不加 ,加了else时,前面的条件全都为假时执行else内部的代码
}
3.switch语句
switch语句是一种比较常见的多分支选择结构的写法
switch(变量) {
case 值1:
// 当变量对应的值是值1时,执行这儿的代码
break;
case 值2:
// 当变量对应的值是值2时,执行这儿的代码
break;
case 值3:
// 当变量对应的值是值3时,执行这儿的代码
break;
...
default:
// 表示剩余的条件
break;
}
switch语句的注意点:
1、一般而言,没有特殊情况,case必须加break;
2、default根据情况而言,看需不需要;
3、(面试重点)在早期jdk1.5之前,switch的变量类型,只支持char、short、byte、int四种
在jdk5.0时,增加了枚举类型(enum类型)
在jdk7.0时,增加了字符串类型!!!
到目前为止,不支持long和浮点数据!!!
4.循环
作用:周而复始的执行代码
目的:代码的重复
for循环:
for (定义变量; 条件判断;索引变化) {//第一个分号前是最开始执行的代码,整个循环中只执行一次一般用来定义变量
// 循环体
}
注意:for循环是编程语言中最重要的循环方式之一,由四部分组成,第一部分,也就是定义变量,只执行一次
第二步条件判断执行完成后,如果结果为true,则立刻循环循环体的代码,之后再执行第三部,也就是索引变化。
break和continue关键字:
break的作用:
1、在switch语句中终止switch语句
2、在循环中终止离它最近的那层循环
continue关键字的作用:
终止本次循环,进入下次循环
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i%2==0) {
continue;
}
System.out.println(i);
}
}
}
结果输出
1
3
5
7
9
循环中遇到 i 能被2整除就跳过本次循环,否则输出 i 。
while循环:
while(条件) {
// 循环体
}
do while循环:
do {
// 循环体 先执行一遍循环体再判断条件
} while (条件);
特点:即便条件不符合,也会执行一次!!!
do while循环在编程中,常见的使用场景就是人机交互