java Switch 解析

Java-Switch语句解析

 

[常规Swith语句]
//: VowelsAndConsonants.java
// Demonstrates the switch statement

public class VowelsAndConsonants {
 public static void main(String[] args) {
 for(int i = 0; i < 100; i++) {
  char c = (char)(Math.random() * 26 + 'a');
  System.out.print(c + ": ");
  switch (c) {
   case 'a':
   case 'e':
   case 'i':
   case 'o':
   case 'u':
    System.out.println("vowel");
    break;
   case 'y':
   case 'w':
    System.out.println("Sometimes a vowel");
    break;
   default:
    System.out.println("consonant");
  }
 }
  }
}

应特别留意这个语句:
char c = (char)(Math.random() * 26 + 'a');
Math.random()会产生一个double值,所以26会转换成double类型,以便执行乘法运算。这个运算也会产生一个double值。这意味着为了执行加法,必须无将'a'转换成一个double。利用一个“造型”,double结果会转换回char。

造型会对char作什么样的处理呢?换言之,假设一个值是29.7,我们把它造型成一个char,结果值是30。在将一个float或double值造型成整数值后,是将小数部分直接“砍掉”,不作任何进位处理。

 

[无Break语句情况]
public static void main(String[] args) {
 int a=5;
 int s=0;
 switch(a)
 {
  case 5:
   s += 1;
  case 9:
   s += 3;
  case 8:
   s += 5;
  default:
   s += 10;
  break;
 }
 System.out.print(s);
}

结果:19
因没有break;故程序执行s += 1;s += 3;s += 5;s += 10;应注意的是,default中的语句也被执行了。

 

[非常规的default位置]
public class B {
 public static void main(String Args[]){
  int i =1 ,j =0;
  switch(i)
  {
   default:j+=2;
   case 2:j+=6;
   case 4:j+=6;

case 0:j+=4;
  }
  System.out.println(j);
 }
}

结果为18。i=1,case语句无相符条目,故执行default。default语句无break,故实际执行为:j+=2;j+=6;j+=6;j+=4;——由此得j=18。
若i=2,则实际执行为:j+=6;j+=6;j+=4;——最终结果为j=16。

 

[Java中switch比elseif效率高的原因]
if语句适用范围比较广,只要是boolean表达式都可以用if判断;而switch只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。

说到基本类型的数值比较,那当然要有两个数。if 语句每一句都是独立的,看下面的语句:
if (a == 1) {...}
else if (a == 2) {...}
这样a要被读入寄存器两次,1和2分别被读入寄存器一次。其实a读两次是有点多余的,在全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是if语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个a。

现在把上面的例子改成 switch case 版本:
switch (a) {
 case 0:
  break;
 case 1:
}
因为特定的规则,他一开始就知道你要比 a,于是 a 一次性读取,相比 if 节约了很多开销。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值