写点什么

这道静态变量题,我居然考了 0 分

  • 2022 年 5 月 26 日
  • 本文字数:1051 字

    阅读完需:约 3 分钟

摘要:只有在 Main.a 调用了这个静态变量进行+1 操作之后,静态变量的值才真正的改变了。


本文分享自华为云社区《这道静态变量题,我居然考了0分》,作者:gentle_zhou 。

 

今天在学习 java 编程基础知识的时候,里面有一道题考的是静态变量。

刚看到这题,觉得幸福来得太突然,这题也太简单了,果断选答案为 1,然后就错了。。。

看了答案为 0 之后,并不是太能理解,于是先去分析了一下 static 变量的概念。

“Static 静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。当 Java 虚拟机(JVM)加载类时,就会执行该代码块。被 static 修饰的成员变量和成员方法独立于该类的任何对象。”

也就是说在 class 的开头申明的时候,static int a 为 0。然后在 modify()方法里,对传进来的参数 a 进行了+1 操作,但是并没有影响 static int a。只有当我们在 modify() 方法里用了 X.a++ 对静态变量对象进行+1 操作之后,a 的值才真正地进行了更新。

下面附上我的测试代码:

public class Main {private static int a;public static void main(String[] args) {        System.out.println("2nd test " + a);modify(a);        System.out.println("5th test " + a);        Main.a++;        System.out.println("final test " + a);}public static void modify(int a) {        System.out.println("3nd test " + a);        a++;        System.out.println("4th test " + a);}//编译的时候就来执行这一段了,所以Main.a 为5static {        System.out.println("test " + a);        Main.a = 5;        System.out.println("1st test " + a);}}
复制代码

得到的结果如下:test 01st test 52nd test 53nd test 54th test 65th test 5final test 6

从结果我们就可以看出来,在 modify()方法里,a 的值有改变,但是并没有改变 static int a 这个对象的值;只有在 Main.a 调用了这个静态变量进行+1 操作之后,静态变量的值才真正的改变了,于是我们看到 final test 为 6。

 

华为伙伴暨开发者大会 2022 火热来袭,重磅内容不容错过!

​ 【精彩活动】勇往直前·做全能开发者→12场技术直播前瞻,8大技术宝典高能输出,还有代码密室、知识竞赛等多轮神秘任务等你来挑战。即刻闯关,开启终极大奖!点击踏上全能开发者晋级之路吧!​​


【技术专题】未来已来,2022技术探秘→华为各领域的前沿技术、重磅开源项目、创新的应用实践,站在智能世界的入口,探索未来如何照进现实,干货满满点击了解!​​​


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
这道静态变量题,我居然考了0分_Java_华为云开发者社区_InfoQ写作社区