java流程控制考试题_2.12号Java复习题目——Java 中的运算符和流程控制(基础知识)...

Java 中的算术运算符,有七种:

算术运算符名称举例

+

加法

1+2=3

-

减法

2-1=1

*

乘法

2*3=6

/

除法

24/8=3

%

求余

24%7=3

++

自增1

int i=1;i++

--

自减1

int i=1;i--

重点记忆的是 “++” 和 “--”,其他的算术运算符相对比较简单直观,之所以要把 “++” 和 “--” 单独拿出来讲,是因为在使用他们的时候有很多坑需要开发者注意,最重要的是 “++” 和 “--” 也是面试中高频出现的面试题。

代码如下:

int i = 1;int i2 = ++i; //++i 相当于 i = 1+i;

System.out.println(i); //2

System.out.println(i2); //2

++i 和 i++ 的区别

++i 先自加再赋值

i++ 先赋值再自加

代码验证:

int i = 0;int i2 = i++;int j = 0;int j2 = ++j;

System.out.println("i2=" +i2);

System.out.println("j2=" + j2);

输出的结果:

i2=0

j2=1

代码解析:i++ 是先给 i2 赋值再自身 +1 ,所以 i2 等于0,而 ++j 是先自加等于 1 之后,再赋值给 j2,所以 j2 等于 1。

注意事项

++/-- 是非线程安全的,也就是说 ++/-- 操作在多线程下可能会引发混乱,代码如下:

newThread() {

@Overridepublic voidrun() {for (int i = 0; i < 100000; i++) {

System.out.println("thread:" + this.getName() + ",count=" + (++count));

}

}

}.start();newThread() {

@Overridepublic voidrun() {for (int i = 0; i < 100000; i++) {

System.out.println("thread:" + this.getName() + ",count=" + (++count));

}

}

}.start();

执行的结果,如下图:

9d834466d34f6232363b1ff0259a0852.png

如上图所示,每台机器的执行可能略有差距,但大多数情况下并不能给我们想要的真实值 200000。

原理分析

“++” 操作在多线程下引发混乱的原因:因为 ++ 操作对于底层操作系统来说,并不是一条 CPU 操作指令,而是三条 CPU 操作指令——取值、累加、存储,因此无法保证原子性,就会出现上面代码执行后的误差。

如何避免 ++/-- 操作在多线程下的“误差”?

方法一:++/-- 操作放在同步块 synchronized 中。

方法二:自己申明锁,把 ++/-- 操作放入其中。

方法三:使用 AtomicInteger 类型替代 int 类型。

因为 -- 的语法和 ++ 完全一致,所以 -- 的操作,请参照上面的 ++ 语法。

1.2 条件运算符(三元运算符)

条件运算符(?:)也叫“三元运算符”。

语法:

布尔表达式 ? 表达式1 :表达式2

运算过程:如果布尔表达式的值为 true,则返回 表达式 1 的值,否则返回 表达式 2 的值。

代码如下:

String s = 3 > 1 ? "三大于一" : "三小于一";

System.out.println(s);

执行结果:三大于一。

2. 流程控制

在 Java 语言中使用条件语句和循环结构来实现流程控制。

2.1 条件语句

条件语句的语法格式:

if(......) ......

其中的条件判断必须使用括号括起来不能省略。

代码如下:

int i = 1;if (i > 1) {

System.out.println("i大于一");

}else if (i == 1) {

System.out.println("i等于一");

}else{

System.out.println("其他");

}

2.2 循环

while 当条件成立的时候执行下一条语句。

while 语法格式:

while(......) ......

代码如下:

int i = 0;while (i < 3) {

System.out.println(++i);

}

while 是先判断再决定是否执行,有可能一次也不执行,如果希望至少执行一次,可以使用 do/while。

do/while 语法格式:

do{......}while(......);

代码如下:

int i = 0;do{

System.out.println(++i);

}while (i < 3);

确定循环

for 循环是程序中最长使用的循环之一,它是利用每次迭代之后更新计数器来控制循环的次数。

for 语法格式:

for(int i=0;i

代码如下:

for (int i = 0; i < 10; i++) {

System.out.println("i=" +i);

}

for 循环中可使用关键字 continue,跳过后续操作,继续下一次迭代。

代码如下:

for (int i = 1; i < 4; i++) {if (i == 2) continue;

System.out.println("i=" +i);

}

执行结果:

i=1

i=3

如结果所示,第二次循环就会跳过,执行下一次循环。

for 注意事项

在循环中检查两个浮点数是否相等要格外小心,代码如下:

public static voidmain(String[] args) {for (float i = 0; i != 1; i += 0.1) {

System.out.println(i);

}

}

循环永远不会停下来,由于舍入误差,因为 0.1 无法精确的用二级制表示,所以上面代码到 0.9000001 之后,会直接跳到 1.0000001,不会等于 1,所以循环就永远不会停下来。

多重选择

switch 的特点是可以判断多个条件,if 的特点是执行少量判断,它们两个刚好形成互补的关系。

switch 语法格式:

switch(......){ case 1: ...... break; ...... default: ...... break; }

switch 代码如下:

int i = 3;switch(i) {case 1:

System.out.println("等于1");break;case 2:

System.out.println("等于2");break;case 3:

System.out.println("等于3");break;default:

System.out.println("等于其他");break;

}

可用于 case 的类型有:

byte、char、short、int

枚举

字符串(Java SE 7 新加入)

switch 注意事项

switch 使用时,每个选项最末尾一定不要忘记加 break 关键字,否则会执行多个条件。

代码如下:

int i = 1;switch(i) {case 1:

System.out.println("等于1");case 2:

System.out.println("等于2");case 3:

System.out.println("等于3");default:

System.out.println("等于其他");

}

程序执行的结果:

等于1

等于2

等于3

等于其他

所以使用 switch 时,每个选项的末尾一定得加 break 关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值