这是我面试遇到的一道题,题目如下:
1 public class StaticTest { 2 private static int b = 1; 3 private int a = 1; 4 5 public static void main(String[] args) { 6 StaticTest a1 = new StaticTest(); 7 StaticTest a2 = new StaticTest(); 8 a1.a = a1.a+1; 9 a2.a = a2.a+1; 10 System.out.println("a1.a="+a1.a); 11 System.out.println("a2.a="+a2.a); 12 13 StaticTest b1 = new StaticTest(); 14 StaticTest b2 = new StaticTest(); 15 b1.b = b1.b+1; 16 b2.b = b2.b+1; 17 System.out.println("b1.b="+b1.b); 18 System.out.println("b2.b="+b2.b); 19 } 20 }
这道题考察的是静态变量和动态变量的区别,答案是2,2 3,3。
对于a的值是2,是毫无疑问的。
b在这里有static修饰,说明b是静态变量,可以直接StaticTest.b来调用,a需要new出StaticTest 对象来调用。
b随着类的加载而存在,随着类的消失而消失;a随着对象的创建而存在,随着对象被回收而释放
- b1.b = b1.b+1:这一步计算得出b=2
- b2.b = b2.b+1;因为StaticTest一直存在,所以此时b的值为2,最终b的值为2+1
作者:idanyang
出处:http://www.cnblogs.com/idanyang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步