黑马程序员技术交流社区

标题: static & final 疑问??? [打印本页]

作者: 崔朋朋    时间: 2012-9-30 00:00
标题: static & final 疑问???
本帖最后由 崔朋朋 于 2012-9-30 10:36 编辑

问题1:static 变量分配在静态域中,而final 变量分配在常量池中,而这两种变量都实现了对象间数据共享,这两中变量在用途上有啥区别?

问题2:又如这条语句  private static String str=new String("abc");中   str 、new String() 、"abc" 这三者在内存是如何创建、如何指向的?
作者: 胡斌    时间: 2012-9-30 08:27
1.static修饰的变量值可以改变,而final修饰的变量值不可改变。
2.关于分配内存,String str=new String();这个语句已建立,就要首先给对象str分配内存,然后调用默认初始化构造函数初始化;而你的string(abc),那这个就是调用有参构造函数来进行初始化,new String()获取地址传给str,str在堆栈,而abc在堆中。
作者: 张淼    时间: 2012-9-30 09:25
这两种变量都实现了对象间数据共享,但static所修饰的变量值时可以改变的,final所修饰的值是不可以改变的,或初始化时没有赋值,仅可以在构造函数中赋值一次。
private static String str=new String("abc");
1.赋值语句首先看右边:new String("abc"); 这条语句用String的构造函数创建了一个字符串,它首先会查看字符串池中有没有"abc"这条字符串。如果有,就创建一个引用指向这条字符串;如果没有,就创建该字符串。
2.然后看左边:private static String str,该语句会在静态区开辟一块空间,存放第一步中创建字符串的地址,也就是指向第一步中创建的字符串。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2