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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NNERO 中级黑马   /  2014-4-17 17:31  /  1132 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 NNERO 于 2014-4-17 20:27 编辑
  1. package com.itheima;


  2. public class Text {

  3.         public static void main(String[] args) throws Exception{

  4.                 String[] str = {"abc","xyz","you","123"};//定义String数组
  5.                
  6.                 Person[] p = {new Person("nero",24),new Person("you",21),new Person("me",23)};//自定义类型的数组
  7.                
  8.                 sop(str);//打印数组
  9.                 sop(p);//打印数组
  10.                
  11.         }
  12.         public static void sop(Object[] arr){
  13.                 for(int i=0;i<arr.length;i++){
  14.                         System.out.println(arr[i]);//打印数组元素
  15.                 }
  16.         }
  17. }

  18. /*
  19. 自定义Person类
  20. */
  21. class Person{
  22.         String name;
  23.         int age;
  24.         public Person(String name, int age) {
  25.                 super();
  26.                 this.name = name;
  27.                 this.age = age;
  28.         }
  29. }
复制代码
输出结果:
abc
xyz
you
123
com.itheima.Person@2b0a141e
com.itheima.Person@22aed3a5
com.itheima.Person@3c9076d


上面代码的打印结果看出String[]数组 就正确打印了值。
自己定义的类,打印就是哈希值,这是怎么回事?
如果要打印自定义类的数组,该怎么办?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
System.out.println(Object obj)打印的时候是默认调用obj.toString()方法的,当打印String对象的时候直接输出字符串内容,如果是其他引用数据类型则打印内存地址。如果你想按照自己要求的信息打印,则必须添加toString()方法,在person类中添加:
public String toString(){
    return "name:"+this.name+",age:"+this.age;
}
回复 使用道具 举报
因为在你自定义的数组里面装的都是对象,而每个对象在内存中都有存放地址。比如p[0]就是指向Perso("nero",24)这个对象,p[0]存放的是这个对象的哈希值。如果想要打印自定义对象里面的内容最好在自定义的类里写出访问这些成员变量的方法,然后通过这些方法来访问这些类里的内容。
public class text1 {
         public static void main(String[] args) throws Exception{



         String[] str = {"abc","xyz","you","123"};//定义String数组

         

         Person[] p = {new Person("nero",24),new Person("you",21),new Person("me",23)};//自定义类型的数组

         

         sop(str);//打印数组

         sop1(p);//打印数组

         

}

public static void sop(Object[] arr){

         for(int i=0;i<arr.length;i++){

                 System.out.println(arr[i]);//打印数组元素

         }

}
public static void sop1(Person[] arr){

     for(int i=0;i<arr.length;i++){

             System.out.println(arr[i].getname()+"   "+arr[i].getage());//打印数组元素

     }

}
}



/*

自定义Person类

*/

class Person{

String name;

int age;

public Person(String name, int age) {

         super();

         this.name = name;

         this.age = age;

}
public String getname(){
        return name;
}
public int getage(){
        return age;
}
}

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
覆盖toString方法,上代码说明。



  1. package Testpackage;




  2. public class Text {

  3.         public static void main(String[] args) throws Exception{

  4.                 String[] str = {"abc","xyz","you","123"};//定义String数组
  5.                
  6.                 Person[] p = {new Person("nero",24),new Person("you",21),new Person("me",23)};//自定义类型的数组
  7.                
  8.                 sop(str);//打印数组
  9.                 sop(p);//打印数组
  10.                
  11.         }
  12.         public static void sop(Object[] arr){
  13.                 for(int i=0;i<arr.length;i++){
  14.                         System.out.println(arr[i]);//打印数组元素
  15.                 }
  16.         }
  17. }

  18. /*
  19. 自定义Person类
  20. */
  21. class Person{
  22.         String name;
  23.         int age;
  24.         public Person(String name, int age) {
  25.                 super();
  26.                 this.name = name;
  27.                 this.age = age;
  28.         }
  29.                 @Override
  30.                 public String toString() {
  31.                         return "Person [name=" + name + ", age=" + age + "]";
  32.                 }

  33. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 伍叶竹 于 2014-4-17 17:54 编辑

在自定义的类中重写一下toString方法
public String toString()
{
  return "[" + name + "," + age + "]";
}


回复 使用道具 举报
其实person数组里面存的就是Person的对象,此时你打印Person时他会默认的调用Person的toString()方法,所以打印出来的就是哈希值了,如果你想打印Person对象里面的内容的话可以这样System.out.println(Person[i].name + Person[i].age).当然,一般Person类中都会将name和age属性定义为private,然后再调用里面的get方法
回复 使用道具 举报
NNERO 中级黑马 2014-4-17 20:26:59
7#
重写toString方法啊。谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马