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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-4-26 19:03  /  2886 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-4-27 15:18 编辑
  1. class Letter {
  2.         private String letter;//用于保存字母
  3.         private int count;    //用于保存字母出现的个数
  4.         public String getLetter() {
  5.                 return letter;
  6.         }
  7.         public void setLetter(String letter) {
  8.                 this.letter = letter;
  9.         }
  10.         public int getCount() {
  11.                 return count;
  12.         }
  13.         public void setCount(int count) {
  14.                 this.count = count;
  15.         }        
  16. }

  17. public class LetterCount {

  18.         public static void main(String[] args) {
  19.                 String str = new String("abadcdffbaeba");
  20.                 Letter[] letter = new Letter[1];
  21.                 System.out.println(letter[0]);-----------------》这里为什么等于null  ? ?? ??????                 
  22.         }
  23. }
复制代码
我现在正在做入学试题,这应该是一个很简单的问题了,可是哥我就是晕菜了,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对象呢!

9 个回复

倒序浏览

回帖奖励 +5

本帖最后由 光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  ? ?? ??????                 
        }
}
回复 使用道具 举报

回帖奖励 +5

首先!这是一个关于对象数组的用法。
Letter[] letter = new Letter[1];
只是在内存中给对象数组名分配了一个地址,但是并没有给其开辟空间。
这就是为什么你输出的会为空。
当然,对象数组的每一个元素都是要开辟空间的。
这就应该需要 Letter letter[0] = new letter();
这样就不会为空了。
这个就是对象数组的用法。切记元素也要NEW 出来。
回复 使用道具 举报

回帖奖励 +5

letter型的数组,
数组没放元素当然是null啊
letter[0]=new letter();
放了东西才不是null
回复 使用道具 举报

回帖奖励 +5

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));

  }
}
回复 使用道具 举报

回帖奖励 +5

Letter[] letter = new Letter[1];   //你在这儿只是定义了一个长度为一的数组,并没有给他赋值 。
System.out.println(letter[0]) ;   //  而你这里用letter[0]是表示要打印letter数组的第一个元素,而你并没有给数组赋值,数组里面就什么都没有 当然打印出来就是null了  ;如果你是要打印数组的长度是用letter.length.
回复 使用道具 举报

回帖奖励 +5

Letter[] letter = new Letter[1];  只是实例化数组对象,并且为这个数组对象分配了空间。未赋值的部分初始值为0.而letter数组持有的是Letter对象的引用。当引用的值全为0时,该引用就为null;
所以也就打印出null了
回复 使用道具 举报
邓斌 中级黑马 2012-4-27 10:15:45
8#

回帖奖励 +5

String letter  定义一个字符串对象保存字母,然后加数组。这不是多余吗?
直接String[] 不好吗?
回复 使用道具 举报
杨红 初级黑马 2012-4-27 10:39:49
9#

回帖奖励 +5

你定义的letter数组里面根本就没存东西,输出肯定是null咯
回复 使用道具 举报
明白了,谢谢大家!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马