黑马程序员技术交流社区
标题:
关于对象数组的引用为什么是null
[打印本页]
作者:
戴振良
时间:
2012-4-26 19:03
标题:
关于对象数组的引用为什么是null
本帖最后由 戴振良 于 2012-4-27 15:18 编辑
class Letter {
private String letter;//用于保存字母
private int count; //用于保存字母出现的个数
public String getLetter() {
return letter;
}
public void setLetter(String letter) {
this.letter = letter;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
public class LetterCount {
public static void main(String[] args) {
String str = new String("abadcdffbaeba");
Letter[] letter = new Letter[1];
System.out.println(letter[0]);-----------------》这里为什么等于null ? ?? ??????
}
}
复制代码
我现在正在做入学试题,这应该是一个很简单的问题了,可是哥我就是晕菜了,letter[0]这是一个对象吗?为什么是null,也就是说并没有在堆中分配内存,那我要怎样才能一下子分配26个Letter对象呢?
现在搞明白,原来 Letter[] letters = new Letter[26]; 只是new了一个数组对象,这个数组对象叫letters,已经为这个对象在堆内存中开辟了空间,可以印直接打印letters,而这个数组里的元素并没有赋值,这些元素都是Letter对象的引用,对象的引用默认值为null,所以可以说,Letter[] letters = new Letter[26] 只是new 了一个数组对象,而这个数组对象里包含26个Letter对象的引用,我之前以为Letter[] letters = new Letter[24]就是new 了26个Letter对象呢!
作者:
光sail
时间:
2012-4-26 19:23
本帖最后由 光sail 于 2012-4-26 19:25 编辑
class Letter {
private String letter;//用于保存字母
private int count; //用于保存字母出现的个数
public String getLetter() {
return letter;
}
public void setLetter(String letter) {
this.letter = letter;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
public class LetterCount {
public static void main(String[] args) {
String str = new String("abadcdffbaeba");
Letter[] letter = new Letter[1];
//定义Letter数组长度为1,但里面里面没放入元素
System.out.println(letter[0]);-----------------》这里为什么等于null ? ?? ??????
}
}
作者:
杨志
时间:
2012-4-26 19:32
首先!这是一个关于对象数组的用法。
Letter[] letter = new Letter[1];
只是在内存中给对象数组名分配了一个地址,但是并没有给其开辟空间。
这就是为什么你输出的会为空。
当然,对象数组的每一个元素都是要开辟空间的。
这就应该需要 Letter letter[0] = new letter();
这样就不会为空了。
这个就是对象数组的用法。切记元素也要NEW 出来。
作者:
chenwei
时间:
2012-4-26 19:34
letter型的数组,
数组没放元素当然是null啊
letter[0]=new letter();
放了东西才不是null
作者:
乔建国
时间:
2012-4-26 19:46
public class work {
public static int letterCount(String st){ //小写单词个数
int a=0;
char[] ch=st.toCharArray();
int len=st.length();
for(int i=0;i<len;i++){
a++;
}
return a;
}
public static void main(String[] args) {
String b="HelloWorld";
System.out.println("所给字符串中的单词个数为:"+letterCount(b));
}
}
作者:
崔仁军
时间:
2012-4-26 19:48
Letter[] letter = new Letter[1]; //你在这儿只是定义了一个长度为一的数组,并没有给他赋值 。
System.out.println(letter[0]) ; // 而你这里用letter[0]是表示要打印letter数组的第一个元素,而你并没有给数组赋值,数组里面就什么都没有 当然打印出来就是null了 ;如果你是要打印数组的长度是用letter.length.
作者:
高彰谦
时间:
2012-4-26 19:49
Letter[] letter = new Letter[1]; 只是实例化数组对象,并且为这个数组对象分配了空间。未赋值的部分初始值为0.而letter数组持有的是Letter对象的引用。当引用的值全为0时,该引用就为null;
所以也就打印出null了
作者:
邓斌
时间:
2012-4-27 10:15
String letter 定义一个字符串对象保存字母,然后加数组。这不是多余吗?
直接String[] 不好吗?
作者:
杨红
时间:
2012-4-27 10:39
你定义的letter数组里面根本就没存东西,输出肯定是null咯
作者:
戴振良
时间:
2012-4-27 15:10
明白了,谢谢大家!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2