JAVA变量的使用范围的简单问题?

请问大佬们这图片里的题目,为啥int x=3改为3,输出的是3呢,不是9呢?x=3不是被大括号包着了吗,作用域不只能在括号里面吗,不应该外面用不了吗,为啥输出的却是3呢?不是9呢?

如果{}中是int x =3(注意这个是在{}中声明了一个新的变量); 则在{}外是访问不到这个x的,只能访问到外面的x。如果在{}里面是x=3,(注意这个是修改{}外面声明的x)则表示把{}外面生成的x改成了3.则输出的就是3
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-26
你的理解有问题,讨论作用域的前提是“声明的变量”,如果你在大括号里没有声明int x,而是引用x(即不写int),那么引用的x自然是上一级的x,也就是大括号外面的x,重点在于你要理解改变的是哪个x的值。
再纠正你的一点误解:括号外的变量的作用域也作用于括号里,只是当括号里声明了同名局部变量的时候,括号里的变量优先被引用而已。追问

哦 说的很好 在问个问题:括号有什么用?不加和加有没有什么区别的?

追答

大括号吗?大括号产生一个新的子作用域。如果你不加的话,那么在同一级作用域里,是没办法声明两个同名的变量的。就好像文章的目录一样,你不允许有两章都叫“概述”,但是在第一章“概述”下面,完全可以有第一节“概述”。

本回答被提问者和网友采纳
第2个回答  2020-04-01
你这个括号加了的效果和没加是一样的,刚开始是int x=3,说明是重新声明了一个"x"变量(同一个类中不建议声明相同名字的变量),x=3则是重新赋值
第3个回答  2020-03-26
{
int x=9;
{
int x=3;//
}上行x为局部变量,出了此花括号就没用
}

//==================
{
int x=9;
{
x=3;//
}上行x为全局部变量
}追问

那样就是全局变量吗 全局变量不应该写在开头声明那的莫 呃呃 不是很懂 刚入手

相似回答