有一个问题,像不太明白,java作用域中再套一个作用域,属性重名就不行,为什么C语言就可以?
{ System.out.println("xx00"); String str="hello"; { String str="hello"; System.out.println("00xx"); } }
什么原理?有知道的吗?
收起
作用域在Java方法中是不能嵌套的。在Java中,方法内的一个变量的作用域(包括方法参数)是从它定义的地方开始,直到它所在的作用域的结束位置。比如,在方法开始定义了变量i,那么直到方法结束都不能再定义另一个i了。再比如在一个for语句中定义了变量i,那么在这个for循环内不能再有同名变量,但出了for循环之后,是可以再次定义的。这就是作用域不能嵌套的意思。在c/c++中,作用域可以嵌套,比如:int i;{int i;{......可以无限制地嵌套下去,这里每对大括号之间就是一个独立的作用域}}
再深入一点,在Java中,类与方法之间作用域是可以嵌套的,把类看做一个大的作用域,它定义的字段(或叫域)可以被方法中的同名字段所屏蔽,其行为类似于上面将的c/c++的作用域嵌套。
那C再运行时怎么确定用的时哪一个i 呢?
一样的,离得近的
报告相同问题?
程序员都在用的中文IT技术交流社区
专业的中文 IT 技术社区,与千万技术人共成长
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!