switch 中变量的生成和回收

switch 中变量的生成和回收

switch (i){
    case 1: 
        Book book = new Book();
        break;
    case 2:
        book = new Book();
        break;
}

变异不会出问题,但是如果代码运行时没有到case 1 的分支的话是否会报错?能否讲解下switch中变量生成的存储和释放的逻辑?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

    1、如果 i = 2,逻辑上来讲val的定义和初始化会跳过(都在case1中)那么case2 的赋值语句应该要报错,但是为什么编译没有错误。 那么val是在什么时候定义为int的呢?

不应该报错,val是在case1时就已经被定义好了,即使跳过了case1

http://img1.sycdn.imooc.com//climg/5e637991097b0b6405900490.jpg

    2、如果变量不是基础类型而是对象的话,有什么不同呢?

同学是指如下这种吗?老师在这里并没有赋值,以空举例:

http://img1.sycdn.imooc.com//climg/5e6379e4095135d805770474.jpg

如果是以上这种,可以发现并没有区别。

    3、switch case 下面语句块中变量的生存周期是什么样的呢?

在case语句中定义局部变量,它的作用域为它所定义的地方到它所在的语句块结束为止。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

好帮手慕小脸 2020-03-07 13:55:33

同学你好,如果代码运行时没有到case 1 的分支的话是否会报错?

同学是指如下这种吗?

http://img1.sycdn.imooc.com//climg/5e63368d097c255006360348.jpg

如果是,可以看到没有到case1并不会报错。

2、能否讲解下switch中变量生成的存储和释放的逻辑

老师未能理解同学的意思,同学可附上代码或截图,方便老师及时解决问题。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 RobertDuran #1
    老师你好,假设有个switch(i){ case 1: int val = 0; //定义变量val //省略代码 break; case 2: val = 2; //给val重新赋值为2 //省略代码 beak; default: //省略代码 } 如果 i = 2,逻辑上来讲val的定义和初始化会跳过(都在case1中)那么case2 的赋值语句应该要报错,但是为什么编译没有错误。 那么val是在什么时候定义为int的呢?如果变量不是基础类型而是对象的话,有什么不同呢?switch case 下面语句块中变量的生存周期是什么样的呢?
    2020-03-07 15:30:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师