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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 空心祭 中级黑马   /  2014-3-18 09:26  /  1107 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在看视频的时候发现一个问题,到现在没有想明白...
那就是集合里面传入的类,直接迭代打印出来的是类对应的地址值
那么为什么字符串打印出来的直接就是字符串呢?而建立别的类比如学生等出来的都是地址值啊
为什么字符串直接就出来字符串了,而不是地址值呢?

评分

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

查看全部评分

6 个回复

倒序浏览
package cn.itcast.day7;

import java.util.ArrayList;
import java.util.List;

public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
                Person p = new Person();
                List list = new ArrayList();
                list.add(p);
                list.add("abc");
               
                System.out.println(list.get(0));
                System.out.println(list.get(1));
        }

}

class Person {
       
}
结果:
cn.itcast.day7.Person@4f1d0d
abc
你是这个意思吧!

你是在集合里面传入的类的具体实例的引用对象吧!一个引用对象本来就是一个地址,你在打印它的时候会自动调用toString()方法,结果就是一个地址;而如果传入的是一个字符串,比如“abc”,它是一个字符串的实体对象,在打印它的时候也默认调用toString()方法,结果就是abc。

评分

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

查看全部评分

回复 使用道具 举报
在自定义类里面重写Object类提供的toString方法就可以实现你想输出的内容!
回复 使用道具 举报
所有类都默认是java.lang包中的Object类的子类或间接子类。Object类中有一个public方法public String toString(),一个对象通过调用该方法可以获得该对象的字符串表示。一个类可以通过重写toString()方法来获得该类的对象想要的字符串表示。如java.util包中的Date类就重写了toString()方法,使得Date对象调用toString()方法得到的字符串是有日期信息组成的字符序列。如果一个类没有重写toString()方法,那么该类所创建的对象调用toString()方法得到的字符串格式为:类型@对象的引用

而String重写了toString()方法,输出的就是其值
  1. import java.util.Date;


  2. public class Test {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 Date date=new Date();
  6.                 String str="abced";
  7.                
  8.                 Student2 stu=new Student2("zhangsan",55);
  9.                 TV tv=new TV("电视机",555);
  10.                
  11.                 System.out.println(date);
  12.                 System.out.println(str);
  13.                 System.out.println(stu);
  14.                 System.out.println(tv);
  15.         }

  16. }

  17. class Student2{
  18.         String name;
  19.         double score;
  20.        
  21.         Student2(String name,double score){
  22.                 this.name=name;
  23.                 this.score=score;
  24.         }
  25.        
  26.         public String toString(){
  27.                 return "姓名:"+name+",分数"+score;
  28.         }
  29. }

  30. class TV{
  31.         String name;
  32.         double price;
  33.         TV(String name,double price){
  34.                 this.name=name;
  35.                 this.price=price;
  36.         }
  37. }
复制代码



QQ截图20140318100507.png (1.59 KB, 下载次数: 7)

QQ截图20140318100507.png

评分

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

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 Alexander 于 2014-3-18 11:19 编辑

一般来说,对象默认的都有toString()方法,即打印该对象的信息,如果系统没有对toString()方法进行重写,那么打印出的形式为:对象类型@对象的引用像你说的String类型的toString方法已经实现了

  • public String toString(){}
  • This object (which is already a string!) is itself returned

    • Returns:the string itself//上面的提示是说,这个对象返回值是它本身

      那么就是说,如果该对象的toString()方法没有重写,那么就是按照系统默认的方式,在打印该对象时调用的是toString()方法就呈现出默认形式:对象类型@对象的引用
      如果想以自己的方式打印一个对象,就要重写该对象的toString()方法了例如:定义一个Person对象,并重写其toString()方法
    • class Person {
    •      String name;    int age;
    •      Person(String name, int age) {
    •             this.name = name;       this.age = age;
    •      }
    •      public String toString() {
    •             return "name:" + name + "---age:" + age;
    •      }
    • }


           public class PersonTest {
                 Person p = new Person("花花", 23);
                 System.out.println(p);
           }

    打印结果为:name:花花---age:23


评分

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

查看全部评分

回复 使用道具 举报
Object类中的toString方法中写的其实也很清楚
建议所有子类都重写此方法。

也就是说
重写了此方法,你写什么打印什么
否则就调用了Object的toString()
getClass().getName() + '@' + Integer.toHexString(hashCode())

评分

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

查看全部评分

回复 使用道具 举报
toString()方法的问题啊,你自己写一个学生类,把toString重写了就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马