c switch case语句语句中,case的后面为什么必须是常量

java中switch case语句的使用方法-Java基础-Jsp教程-壹聚教程网java中switch case语句的使用方法
switch case语句在很多编程语言中都是一样的功能,条件判断了,下面我来介绍java中switch case语句的使用方法,下面整理了几个测试例子,希望对各位有帮助。
switch语法
switch(表达式)
case 常量表达式1:语句1;
case 常量表达式2:语句2;
default:语句;
default就是如果没有符合的case就执行它,default并不是必须的.
case后的语句可以不用大括号.
switch语句的判断条件可以接受int,byte,char,short,不能接受其他类型.
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,利用这一特性可以让好几个case执行统一语句.
public class SwitchDemo {
&public static void main(String[] args) {
&&System.out.println(switchTest(4));//55
&private static int switchTest(int key) {
&&int value = 0;
&&switch (key) {
&&&value = 11;
&&&value = 22;
&&&value = 33;
&&&value = 44;
&&default:
&&&value = 55;
输出 : 55
switch-case的注意地方
下面是switch的简单写法:
switch(A){
A部分中的值必须是int型的,或者是能够自动进行饮试转换成int型的表达式。也就是说A部分可以是byte/short/char/int型的。
其次要强调的是该程序中B部分的值必须是单个byte/short/char/int型的值,或者是final型的变量。
但是final型的变量也是有要求的,也即是它必须是编译时的常量,怎么讲呢,看下面的程序段:
final int a = 0;
第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。
所以总结case后的值可以是常数值或final型的值。
再看下面的程序段:
public class TestSwitch {
public static void main(String[] args){
byte a = 11;
switch(a){// C
case 11 : System.out.println(& 11 &);
case 225 : System.out.println(& 11 &);// D
该代码正确吗?答案是否定的。虽然在 C 处是合法的也即是byte型的a值可以出现在switch中,但是 D处的语句也即是第二个case后的值是225大小超过了byte的范围,所以是错误的。再就是case后的值不能出现重复。因此在使用中要注意。
=====================
再就是在使用switch-case中最容易忽视的就是忘记在每个case后处理完后忘记写上break;语句。那它带来的后果是什么呢,下面小程序段会告诉你:
public class TestSwitchCase {
public static void main(String[] args){
byte a = 2;
switch(a){
case 1 : System.out.println(& A &);
case 2 : System.out.println(& B &);
case 3 : System.out.println(& C &);
case 4 : System.out.println(& D &);
&&&&&&&&&&&&&&& default : System.out.println(& default &);
=========输出结果为:
--------------------------
看到了吗?连default都执行,注意结束符就OK了。
case中A不能为变量
Java switch case里面的用法,由于 switch case 和 if-else 工作原理不一样,可能某些公司会避免使用if-else而采用switch case的方法来解决问题。
在jdk1.6 中:
int i= &test&.hashcode();
String s = &test&;
switch (s.hashcode()) {
& case i :System.out.println(&bad&);
}//这种方法是不支持的。编译根本通过不了,因为 i 是一个变量
经过网上一翻查找,在jdk1.7中可能会支持这个功能。
但是问题就不能这么简单的解决,因为现在很多企业都没有在使用1.7的版本。
没事在电脑面前想出来一个办法,应该可以行得通在jdk1.6中解决 case不能使用变量的方法
public class TestHash {
& * Comments:
& * @author Jacky
& * Chinese :
& * @param args
&public static void main(String[] args) {
&& String s = &test&;
&& int i= &test&.hashCode();
& switch ( (&test1&.hashCode()== i ? 1:1) *(&test2&.hashCode() == i ? 2:1) *(s.hashCode() == i ? 3 :1) ){
&&&&&&&&&&&& case&& 1 :System.out.println(&not good&);
&&&&&&&&&&&& case&& 2 : System.out.println(&not good&);
&&&&&&&&&&&& case&& 3& : System.out.println(&good&);
&&&&&&&&&&&& default : System.out.print(4);
& }//switch
ok,我运行了下,运行结果是打印 good
上一页: &&&&&下一页:相关内容
暂无与此文章相关内容最新内容【switch语句到case之前的代码段是不会执行的吗】_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:489,153贴子:
【switch语句到case之前的代码段是不会执行的吗】收藏
例如格式如此switch(表达式){代码段case(常量表达式1);case(常量表达式2);……}是不是switch语句会无视前头的那个代码段直接先找case这个开关?
票牛教你如何买到热门、便宜、真实的演出门票!
是吧。没有case (常量..:匹配。应该就不会执行吧
自己写段代码试试呗!
switch相当于特殊的goto
一句printf(“我执行了吗?”);没必要发帖吧
switch里case外不可以有代码吧
case关键字好假你说的说的就是语录符号。。。
还有个问题,假若这代码段改成这样,把default放case前面void main(void){int n=5;switch(n){default: a=100;case -1: a=-10;case 0: a=0;case 1: a=10;}printf(&a=%d&,a);}这代码的流程按理来说是先找case的吧?但是我用LCC一步一步走的时候发现这步数跑完default下一步直接跳出了整个switch,这程序不用按流程把下面那三也审一下吗?
楼主学C多长时间了?——来自 爱贴吧 Windows Phone 客户端
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或switch语句中case后如何表示多个常量?
用于分段函数
case 1:case 2:case 3:
已有帐号?
无法登录?
社交帐号登录为什么不能是变量?
Java中switch语句可以用来判断enum枚举类型
因为C语言中的 switch 不是 if 的替代品。&br&&br&编译时会对 switch 进行优化,根据 case 标签后面的常量值,生成跳转表,只经过少数次数的比较,就可以跳到对应标签下面。所以,标签也是不能重复的。如果允许变量,switch 只能退化成跟一连串的 if else, 对于一个数据也只能从头到尾地进行比较,也就失去了 switch 的意义。跳转表和逐个比较,这两种方式的复杂度差很多。&br&&br&这也是 python 没有引入和 C 语言里面的 switch case 相对应的控制结构的一个原因。
因为C语言中的 switch 不是 if 的替代品。 编译时会对 switch 进行优化,根据 case 标签后面的常量值,生成跳转表,只经过少数次数的比较,就可以跳到对应标签下面。所以,标签也是不能重复的。如果允许变量,switch 只能退化成跟一连串的 if else, 对于一…
看这 &a href=&///?target=http%3A///questions//why-can-switch-only-compare-to-const-values& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&c++ - Why can switch only compare to const values?&i class=&icon-external&&&/i&&/a&
已有帐号?
无法登录?
社交帐号登录switch case中case后一般跟什么,常量表达式是什么东西?..case后面跟的必须是一个字符吗?如A,1,&,等等
switch也相当一个循环,case后边跟的是满足条件,所以必须是一个常量,或者常量表达式,意思就是必须跟一个唯一值.只有当条件满足这个唯一值得时候才会执行满足条件的代码,如果不满足会继续下一个case,直到找到满足的条件,如果都不满足就执行default,不知道这么说你是否明白
那case后必须是一个字符吗?
不一定,可以是字符,也可以是表达式
为您推荐:
其他类似问题
扫描下载二维码}

我要回帖

更多关于 switch case 常量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信