这个k的值为什么是2?

playmakerlby 2021-10-12 16:56:56
public class Foo {
    static int i = 0;
    static int j = 0;
    public static void main(String[] args) {
        int i = 2;
        int k = 3;
        {
            int j = 3;
            System.out.println("i + j is " + i + j);
        }
        k = i + j;
        System.out.println("k is " + k);
        System.out.println("j is " + j);
    }
}

为什么j刚被赋值了3,又变回了0?

...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
技术SOLO网 2023-11-06
  • 打赏
  • 举报
回复

作用域的问题

playmakerlby 2021-10-12
  • 打赏
  • 举报
回复

明白了,谢谢各位大佬

妙七先生 2021-10-12
  • 打赏
  • 举报
回复 1
  1. 在整个程序中j出现了两次,一次是声明在方法外的静态整型变量,并初始化为0,称为j1;另外一次是声明在main方法内部的一个嵌套块内,并初始化为3,称为j2;
  2. 静态方法可以操作静态变量,非静态方法可以操作静态变量和非静态变量;
  3. 根据第二条可知,第一个变量j可以在main()方法中使用,也就是说,j1的作用域是整个类;
  4. 第二个变量j声明在一个嵌套块中,所以,j2的作用域仅限于这个嵌套块
  5. j1和j2是两个不同的变量,j2的声明和初始化并不会影响j1的值
  6. 在执行到k = i + j; 时,由于已经不在j2的作用域范围,j = 0。
playmakerlby 2021-10-12
  • 举报
回复
@妙七先生 好的,谢谢
weixin_45393778 2021-10-12
  • 打赏
  • 举报
回复 1

如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量

weixin_45393778 2021-10-12
  • 打赏
  • 举报
回复 1

局部变量,只作用于所在代码块(即一个大括号),局部变量没有初始值,从定义到所属代码块结束

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧