switch在内存中的实现机制

首先我们知道if...else和else...if这些条件判断是依次判断,我们都会把数据量大的尽量放到前面去执行先判断以提高程序效率,而switch实现机制和if...else不一样,switch和case判断的条件上下顺序无关,它在内存中的实现是靠一张表依次存放case的,无论你编写是case 1,2,3,4,5还是case5,4,3,2,1在内存中存放都是按1,2,3,4,5依次存放的,所以case是否按顺序编写它执行效率都是一样的

让我们看看内存就知道了例子如下:

switch中case按顺序编写在内存中如下图

switch在内存中的实现机制

可以看到按顺序编写在地址表中是按顺序依次存储的

 

如果不按顺序编写代码看看是否是按顺序依次存储的呢,如下图

switch在内存中的实现机制

看图可以知道如果不按顺序编写在地址表中也是会依次存放的

 

刚实验的都是连续(如12345)的值的,如果是不连续(53216缺少一个值)的值编写的会怎样,如下图

 

switch在内存中的实现机制

可以看到如果缺一个的话会把缺的位置上存放的是default的地址

 

如果把default去除会怎样如下图

switch在内存中的实现机制

可以看到如果缺一个并且代码没有default的话会把缺的位置上存放的是system的地址

 

还有一种情况,如果是不连续并且跨度比较大的话会怎样(如case1,11,21,3)

switch在内存中的实现机制

可以看到case相差大的话在地址表中也是按顺序依次存储的