switch中default、break

thinging in java中有这段代码

public Shape next() { 
    switch(rand.nextInt(3)) { 
      default: 
      case 0: return new Circle(); 
      case 1: return new Square(); 
      case 2: return new Triangle(); 
    } 
  }

 搜了一下,关于default的位置的讨论

http://www.iteye.com/problems/67170

--------------

我认为比较合适的解释就是:在可以完全预见的情况下,只有0、1、2三种值,所以default放在最前面,表明了default的情况不可能发生。default后面没有return,所以就相当于default 和case 0 公用一段return new Circle();

----------------------------------

我又测试了几段代码

int i = 0;
		switch (i) {
		default:
			//break;
		case 0:
			System.out.println("0000");
			//break;
		case 1:
			System.out.println("1111");
			//break;
		case 10:
			System.out.println("101010");
			break;
		
		}

 当i=0时

0000
1111
101010

当i=1时

1111
101010

当i=9时

0000
1111
101010

当i=10时

101010

---------------

一开始没理解i=0,1,9时,为什么101010也会打印出来,后来才恍然大悟

理解这个的关键是case(包括default)若没有break,就相当于case穿透/自动贯穿/fall through等等这些术语

比如上面的代码:因为default、case0 都没有break,那么default、case0、case1是公用一段return的!!

自此,真相大白,世界安静了

继而感叹自己理解力太弱了。。。。。哎

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值