A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 想飞的鱼 中级黑马   /  2014-9-10 23:02  /  1081 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,堆内存的特点之一是:堆内存中的变量都有默认初始化值。
2,数据类型分基本数据类型和引用数据类型,String类型是引用数据类型,字符串应该是一个对象。
3,对象应该存储在堆内存中。但是字符串是在堆内存中吗???(它也是一个常量,对于常量我不知道它应该在哪片内存)这一点我不清楚。如果它是在堆内存中,那么就应该有默认初始化值才对啊
4,代码比较
class Demo
{
        public static void main(String[] args)
        {
                String name;
                //System.out.println(name);//Demo.java:6: 错误: 可能尚未初始化变量name——为什么没有默认初始化null

                Person p = new Person();
                System.out.println(p.name);//默认初始化值:null
        }
}
class Person
{
        String name;
}


还望大家指点迷津,给讲讲字符串的知识。谢谢!

2 个回复

倒序浏览
本帖最后由 李春丽 于 2014-9-10 23:31 编辑

class Demo
{
         public static void main(String[] args)
         {
                 String name; //这个 name 存在于栈内存中,需要初始化。
                 //System.out.println(name);//Demo.java:6: 错误: 可能尚未初始化变量name——为什么没有默认初始化null

                Person p = new Person(); //对象实例化
                 System.out.println(p.name);//默认初始化值:null
         }
}
class Person
{
         String name;//这个 name 是 Person 类中的常量,创建 Person 类对象时,才有这个常量,存在于堆内存中。
}

或许你可以这样理解: main 中的成员变量存在于栈内存中,必须要执行的代码。
而其他类中的成员变量,需要随着它所在的类的被调用而加载的,相较于 main 中的成员,创建有前提条件,故而存在于堆内存中。
回复 使用道具 举报
李春丽 发表于 2014-9-10 23:29
class Demo
{
         public static void main(String[] args)

哦了,第一个name在方法中,属于局部变量在栈内存,所以应该初始化,谢谢哥们!:)糊涂了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马