当前位置: 首页 > news >正文

Java 面试系列:Java 中的运算符和流程控制 + 面试题

算术运算符

Java 中的算术运算符,包括以下几种:

算术运算符名称举例
+加法1+2=3
-减法2-1=1
*乘法2*3=6
/除法24/8=3
%求余24%7=3
++自增1int i=1;i++
--自减1int i=1;i--

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

先来看 “++” 的基本使用:

int i = 1;
int i2 = ++i; // ++i 相当于 i = 1+i;
System.out.println(i);  // 2
System.out.println(i2); // 2

++ii++ 的区别

  • ++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。

注意事项

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

new Thread() {
    @Override
    public void run() {
        for (int i = 0; i < 100000; i++) {
            System.out.println("thread:" + this.getName() + ",count=" + (++count));
        }
    }
}.start();
new Thread() {
    @Override
    public void run() {
        for (int i = 0; i < 100000; i++) {
            System.out.println("thread:" + this.getName() + ",count=" + (++count));
        }
    }
}.start();

执行的结果,如下图:

执行结果

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

原理分析

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

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

  • 方法一:++/-- 操作放在同步块 synchronized 中。
  • 方法二:自己申明锁,把 ++/-- 操作放入其中。
  • 方法三:使用 AtomicInteger 类型替代 int 类型。

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

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

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

语法:

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

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

例如:

String s = 3 > 1 ? "三大于一" : "三小于一";
System.out.println(s);

执行结果:三大于一

流程控制

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

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 循环

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);

3 确定循环

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

for 语法格式:



喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

  • 先进制造aps专题三十三 开源aps产品,frepple和dream对比分析
  • go --- go run main.go 和 go run .
  • Rollup详解
  • 西湖大学团队开源SaProt等多款蛋白质语言模型,覆盖结构功能预测/跨模态信息搜索/氨基酸序列设计等
  • 【7】C#上位机---Modbus RTU 界面设计与封装
  • linux (CentOS 10)使用传统程序语言(C)进行编译---主,子程序连接:子程序的编译
  • 新球体育比分状态监控
  • 【工具】Redis管理工具推荐
  • Spring Boot + MyBatis + Maven论坛内容管理系统源码
  • 阿里云域名证书自动更新acme.sh
  • 在 Windows 上设置 vm.max_map_count 参数
  • 在ubuntu24上装ubuntu22
  • docker相关命令
  • Vue3实战三、Axios封装结合mock数据、Vite跨域及环境变量配置
  • Linux-CentOS-7—— 配置静态IP地址
  • PyTorch 笔记
  • Next.js + SQLite 项目 Docker 生产环境部署方案
  • 从数据到成果:R 语言在气象水文全流程中的关键技术应用
  • linux查看当前文件夹下面文件大小
  • 队列➕宽搜(BFS)算法的应用
  • 世卫大会连续9年拒绝涉台提案
  • 特朗普与普京通话前夕,英美法德意领导人通话讨论俄乌问题
  • 最高法:依法惩治损害民营企业合法权益的串通投标行为
  • 波兰总统选举投票开始,将是对亲欧路线的一次严峻考验
  • 博物馆书单|走进博物馆,去体验一场与文明的对话
  • 莫高义在第四届中国新闻发言人论坛开幕式上的致辞