Java switch使用原理及实例解析
作者:西红柿里没有番茄 发布时间:2023-10-11 20:44:20
这篇文章主要介绍了Java switch使用及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java中有两个经常用于条件判断的方法,一个是if{}else{},另一个就是switch()了。总的来说因为switch可以直接一对一满足条件,不满足条件的情况是不会执行的的所以switch的效率会相对if{}else{}更高一些,而且这两个方法是可以无门槛互换的。
switch的使用:
能用于switch判断的类型有:byte、short、int、char(JDK1.6),还有枚举类型,但是在JDK1.7后添加了对String类型的判断
case语句中少写了break,编译不会报错,但是会一直执行之后所有case条件下的语句而不再判断,直到default语句
若果没有符合条件的case就执行default下的代码块,default并不是必须的,也可以不写
switch(mark) {
case 0:
System.out.println(mark);
break;
case 10:
System.out.println(mark);
break;
case 20:
System.out.println(mark);
break;
}
这里mark值是判断条件,case 对应的是具体的值,如果mark=0或者mark=10或者mark=20,相对应的条件成立就会执行case中的程序
在这里有一个思维误区很容易出错,看下面代码:
switch(mark) {
case 0:
System.out.println(mark);
mark = 10;
break;
case 10:
System.out.println(mark);
mark = 20;
break;
case 20:
System.out.println(mark);
mark = 30;
break;
}
这段代码比和上面的代码相比,在每个case中会重新给mark赋值,让这个重新赋的值和下一步的case相对应。
错误思维:如果mark的初始值是0,这个switch程序会执行三次,执行的顺序依次是0,10,20。
因为我们在每一步的case中都重新给mark赋值了,所以不熟悉的很容易就会觉得这个switch会从上往下执行,凡是满足条件的步骤都会执行。其实这个switch是只会执行一次的,因为每个case后面都跟了一个break,这个break的作用就是跳出当前循环也就是跳出当前的switch,所以这个switch只会执行mark初始值对应的那个case,后面的步骤不会继续执行。如果要想三个步骤都依次执行需要在switch外面加上一个while循环,在一定的条件内重复执行switch:如下加上while
while(mark<=30) {
switch(mark) {
case 0:
System.out.println(mark);
mark = 10;
break;
case 10:
System.out.println(mark);
mark = 20;
break;
case 20:
System.out.println(mark);
mark = 30;
break;
}
}
总结:每次进入switch,如果每个case后面都用break跳出当前循环了,则不管mark的值怎么变,只会执行一个case
来源:https://www.cnblogs.com/lyd447113735/p/8855195.html


猜你喜欢
- 项目数据库中出现许多值为中括号[]的数据,测试报了bug,经过排查是因为使用了json-lib 的jar包导致。json-lib在将xml字
- web.xml中设置:<servlet> <servlet-name>DisplayChart</servle
- redisson的几大特性相信看了这个标题的同学,对这个问题以已经非常不陌生了,信手拈来redisson的几大特性:可重入性【多个业务线同一
- 在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择。这些功能我们叫它Android Di
- 本文实例为大家分享了Android封装MVP实现登录注册功能,供大家参考,具体内容如下model包:import com.bwei.mvps
- 前言最近写了篇有关Eclipse工程转Android Studio工程的文章,而导致公司项目需要转 AS 的直接原因,就是今天要写的主题–方
- 前言最近遇到很有意思转换二进制的问题,有部分童鞋俨然已了解,可能也有一部分童鞋没碰到过也就不知情,这里我们来深入学习下转换二进制所带来的问题
- Logback设置property参数更多参数设置查看官方文档1.方式一:直接配置参数值<configuration> 
- 1、准备使用redis实现分布式锁,需要用的setnx(),所以需要集成Jedis需要引入jar,jar最好和redis的jar版本对应上,
- 栈的变化规则:1、方法调用会导致栈的生长,具体包括两个步骤:一、插入方法返回地址(下图中的Fn:);二、将实际参数按值(可以使用ref或ou
- 1. 概述官方JavaDocsApi: javax.swing.JList JList,列表框。JList 以列表的形式展示多个选项,允许用
- 给大家看个计算题,看看大家的算术能力。0.1 +0.1 +0.1 - 0.3 等于几?大家可能会说这么简单的问题,是不是看不起我?肯定等于0
- 前言一般在c++中没有使用的变量会有警告,C#中也有,在QT中我们利用Q_UNSED可以直接消除这些警告,那么我们在C#中该如何做才能消除这
- 前言之前我们提到了 CustomPaint er 的 Paint 可以使用渐变(GradientShader)来填充绘制的图形,本篇我们来介
- 为了追求更好的用户体验,有时候我们需要一个类似心跳一样跳动着的控件来吸引用户的注意力,这是一个小小的优化需求,但是在 Flutter 里动画
- 多线程经常访问同一资源可能造成什么问题竞态条件和死锁如果两个或多个线程访问相同的对象,或者访问不同步的共享状态 ,就会出现竞态条件;为了避免
- 一个应用场景,浏览器上传一个文件,此文件后台调用文件转换,需要耗费相当长的时间,这样,如果是一个线程同步式的做下去,那么用户在浏览器上感觉就
- 前言:在Java面试中,线程的状态也是被经常考察的知识点,今天我们就来聊一聊线程状态的那些事!线程在JVM中的状态查看线程在JVM中有哪些不
- 首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。下面对类库使用的封装方法:得到指定的输入流的ZIP压
- 无论使用何种IDE开发Android,集成官方Android SDK并创建Android工程之后,该工程都会默认包括一整套Android项目