黑马程序员技术交流社区

标题: 数组的问题 [打印本页]

作者: NNERO    时间: 2014-4-17 17:31
标题: 数组的问题
本帖最后由 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[]数组 就正确打印了值。
自己定义的类,打印就是哈希值,这是怎么回事?
如果要打印自定义类的数组,该怎么办?

作者: 左拉    时间: 2014-4-17 17:39
System.out.println(Object obj)打印的时候是默认调用obj.toString()方法的,当打印String对象的时候直接输出字符串内容,如果是其他引用数据类型则打印内存地址。如果你想按照自己要求的信息打印,则必须添加toString()方法,在person类中添加:
public String toString(){
    return "name:"+this.name+",age:"+this.age;
}
作者: igi9009    时间: 2014-4-17 17:47
因为在你自定义的数组里面装的都是对象,而每个对象在内存中都有存放地址。比如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;
}
}

作者: Kelvinhu    时间: 2014-4-17 17:49
覆盖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. }
复制代码




作者: 轻语。    时间: 2014-4-17 17:52
本帖最后由 伍叶竹 于 2014-4-17 17:54 编辑

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



作者: Doraemon    时间: 2014-4-17 18:47
其实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
重写toString方法啊。谢谢大家




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2