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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗雪梅 中级黑马   /  2012-10-21 10:54  /  1770 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗雪梅 于 2012-10-21 15:44 编辑

基本类型的数据定义就是 int [] a=new int[5];
那引用类型的数组我也这样定义的  Person [] p=new Person[5];  但当我用的时候他总是在报空指针异常,难道引用类型数组不是这样定义的吗

使用的时候我是p.setName("KKK");

我是使用中的问题还是定义中的问题呢

点评

估计你只是申明了存放Person对象的数组,每个数组的指向,并没有实例化  发表于 2012-10-21 11:00

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
个人理解:
当你定义一个Person[] p的时候获得的只是一个空引用
定义了Person [] p=new Person[5],这时获得的是一个引用,这个引用指向一个“数组”;但是这个数组的元素你没有指定,所以都是null,所以不可亦直接引用
如果int [] a=new int[5],这涉及基本类型存储方式和引用类类型存储的不同;同样这个定义,a指向一个数组。然而这个数组是int数组,你获得了5个存储空间,它们都直接存储int数据;对于Person [] p=new Person[5]你也获得了5个存储空间,但是它们存储的是指向Person的引用,并不是类Person的实例的存储空间。
回复 使用道具 举报
修改成这样:Person[] p=new Person[5];
                  Person p0=new Person;
                  Person p2=new Person;
                  Person p3=new Person;
                  Person p4=new Person;
                  
                  p[0]=p0;
                  p[1]=p1;
                  p[2]=p2;
                  p[3]=p3;
                  p[4]=p4;
                  p[0].serName("KKK");
                   ............
回复 使用道具 举报
曹自祥 发表于 2012-10-21 11:35
修改成这样:Person[] p=new Person[5];
                  Person p0=new Person;
                  Pers ...

恩,正解谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马