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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class People {
        private String name ;
        private int age ;
        private String sex ;
         
        public People(){}

        public People(String name , int age , String sex){
                this.name = name ;
                this.age = age;
                this.sex= sex ;
        }

        public void setName (String name ){
                this.name = name ;
        }
        public void setAge (int age){
                this.age = age ;
        }
        public void setSex(String sex){
                this.age = age ;
        }

        public String getName(){
                return this.name;
        }
        public int getAge()
        {
                return this.age;
        }
        public String getSex() {
                return this.sex ;
        }
       
}
interface Filter {
        public boolean filter(People people);
}

class MyFilter implements Filter {
        public boolean filter(People people){
                return people.getSex().equals("female") && people.getAge() > 20;
        }
}

class HongNiang {
        private People[] p ;
        public HongNiang(){
                p = new People[]{
                                                new People("zhangSan", 23, "male"),
                                                new People("liSi", 21, "female"),
                                                new People("wangWu", 9, "male"),
                                                new People("zhaoLiu", 26, "female"),
                                                new People("tianQi", 84, "male"),
                                                new People("jianBa", 23, "female"),
                                                new People("heJiu", 59, "male"),
                                                new People("biShi", 27, "female"),
                                                new People("xiaoQiang", 12, "male"),
                                                new People("wangCai", 25, "female")
                                                };       
        }

        public People[] getPeople(Filter filter){
                People[] xiHuan = new People[5];
                int cnt = 0 ;
                for (int i = 0; i < p.length ; i++) {
                        if(filter.filter(p[i])){
                                xiHuan[cnt] = p[i];
                                cnt++ ;
                        }
                        if (cnt == 5) {
                                break ;
                        }
                }
                return xiHuan ;
        }
}

class MainApp {
        public static void main(String[] args){
                HongNiang hn = new HongNiang();
                People[] p = hn.getPeople(new MyFilter());       
                for (int i = 0; i < p.length; i++) {
                        if (p[i] != null) {
                                System.out.println(p[i]);
                        }
                }
        }
       
}

点评

p是引用类型 ,引用类型得到的值是hash值 ,该值即为引用对象的实际地址值。  发表于 2012-11-12 22:24
你p[]里放的是Person对象,打印的当然是那个对象的hash值了,数组里存的就是对象的索引值 啊,也就是地址的hash值  发表于 2012-11-12 21:36

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 麻烦以后的代码多加注释,尤其是给比他人看.

查看全部评分

7 个回复

倒序浏览
System.out.println(p[i]);
p = new People[]{
                                                new People("zhangSan", 23, "male"),
                                                new People("liSi", 21, "female"),
                                                new People("wangWu", 9, "male"),
                                                new People("zhaoLiu", 26, "female"),
                                                new People("tianQi", 84, "male"),
                                                new People("jianBa", 23, "female"),
                                                new People("heJiu", 59, "male"),
                                                new People("biShi", 27, "female"),
                                                new People("xiaoQiang", 12, "male"),
                                                new People("wangCai", 25, "female")
                                                };        
你打印的是平而在上面给数组p的元素p[i]进行赋值的是实例化对象,这时,你就应该考虑在引用型数据在内存中的运算原理。
p[i]是在栈内存中的,而你赋值的实例化对象是存储在堆内存中,它们之间是靠地址值来联系的,对内存中的地址传给栈中的引用对象,然后栈里的引用对象才指向堆中对应的实例而对象!简单的说,在栈内存中的引用对象的值实际上就是地址值,而你打印的却是类在栈内存中的引用对象,所以你打印的只能是地址值了!要是你要打印实例结果,你应该把数组遍历输出,那就没问题了!

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 很给力!

查看全部评分

回复 使用道具 举报
@Override
    public String toString(){
            return "姓名 : "+this.name+" 性别 : "+this.sex+" 年龄 : "+this.age;
    }
你那样输出肯定会输出内存地址的值的,你是想要输出成名字+性别+年龄的吧? 只要在Person类里复写这个方法就可以了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
补充一下,之所以会打印出地址值,也就是类名+@+hashcode 是以为所有对象的最高及父类为Object,因为你这个Person没有显示父类,所以默认的父类就为Object
查阅下API1.6文档就可以看到里面toString方法,因为你输出的是对象,但是在输出时候会默认调用那个父类的toString方法。
回复 使用道具 举报
黑马吕世成 来自手机 中级黑马 2012-11-13 21:37:35
报纸
楼上正解,顶一个!来自: Android客户端
回复 使用道具 举报
其实这个写成getString或者toString 都行。都能解决你的问题。
回复 使用道具 举报
需要覆盖Person类的toString()方法。
回复 使用道具 举报
陈军 中级黑马 2012-11-14 13:37:54
8#
本帖最后由 陈军 于 2012-11-14 13:40 编辑

就是你的People类没有复写toString()方法。
所以你打印的时候实际调用的是Object类的toString().从而返回地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马