CodeMartain 2022-05-02 08:48 采纳率: 76.3%
浏览 12
已结题

java作用域中在套一个作用域,属性重名就不行,为什么C语言就可以?

有一个问题,像不太明白,
java作用域中再套一个作用域,属性重名就不行,为什么C语言就可以?

    {
        System.out.println("xx00");
        String str="hello";
        {
            String str="hello";
            System.out.println("00xx");
        }
    }
   

什么原理?有知道的吗?

  • 写回答

1条回答 默认 最新

  • 吕布辕门 后端领域新星创作者 2022-05-02 09:07
    关注

    作用域在Java方法中是不能嵌套的。
    在Java中,方法内的一个变量的作用域(包括方法参数)是从它定义的地方开始,直到它所在的作用域的结束位置。
    比如,在方法开始定义了变量i,那么直到方法结束都不能再定义另一个i了。再比如在一个for语句中定义了变量i,那么在这个for循环内不能再有同名变量,但出了for循环之后,是可以再次定义的。这就是作用域不能嵌套的意思。
    在c/c++中,作用域可以嵌套,比如:
    int i;
    {
    int i;
    {
    ......可以无限制地嵌套下去,这里每对大括号之间就是一个独立的作用域
    }
    }

    再深入一点,在Java中,类与方法之间作用域是可以嵌套的,把类看做一个大的作用域,它定义的字段(或叫域)可以被方法中的同名字段所屏蔽,其行为类似于上面将的c/c++的作用域嵌套。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    CodeMartain 2022-05-02 10:15

    那C再运行时怎么确定用的时哪一个i 呢?

    回复
    吕布辕门 回复 CodeMartain 2022-05-02 10:28

    一样的,离得近的

    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 6月19日
  • 已采纳回答 6月12日
  • 创建了问题 5月2日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部