switch 中变量的生成和回收

来源:4-8 项目作业

RobertDuran

2020-03-06 23:20:16

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

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

写回答

2回答

好帮手慕小脸

2020-03-07

同学你好,

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

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

http://img.mukewang.com/climg/5e637991097b0b6405900490.jpg

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

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

http://img.mukewang.com/climg/5e6379e4095135d805770474.jpg

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

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

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

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

0

好帮手慕小脸

2020-03-07

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

同学是指如下这种吗?

http://img.mukewang.com/climg/5e63368d097c255006360348.jpg

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

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

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

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

0
hobertDuran
h 老师你好,假设有个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 下面语句块中变量的生存周期是什么样的呢?
h020-03-07
共1条回复

0 学习 · 11489 问题

查看课程