黑马程序员技术交流社区

标题: 刚学java关于打印结果有不懂的地方 [打印本页]

作者: ぺsimon☆    时间: 2013-5-2 16:42
标题: 刚学java关于打印结果有不懂的地方
本帖最后由 ぺsimon☆ 于 2013-5-2 23:37 编辑

  1. import java.io.*;
  2. class RandomAccessFileDemo
  3. {
  4.         public static void main(String[] args)throws Exception
  5.         {
  6.         RandomAccessFile raf=new RandomAccessFile("raf.txt","rw");
  7.         raf.write("张三".getBytes());
  8.         raf.writeInt(97);
  9.         
  10.         byte[] buf=new byte[4];
  11.         raf.read(buf);

  12.         /*
  13.         注意:问题在这里,谢谢各位兄弟
  14.         字符串数组和整形数组不通过循环可以把元素打印出来吗?
  15.         
  16.         问题2:
  17.         这里可以把容器里的东西打印出来,而为什么数组打印出来的都是地址值呢        

  18.         问题3:
  19.         我在下面覆盖了toString()方法,为什么调用无效?
  20.         toString()方法作用是什么呢?不是把字节数组变成字符串吗?
  21.         toString方法和new String(byte[] buf);,两者有什么区别呢?我用字节数

  22. 组调用toString方法,打印的结果是地址值 ,而new String();可以打印元素
  23.         */

  24.         String s=new String(buf);
  25.         System.out.println(s);

  26.         StringBuffer sb=new StringBuffer();
  27.         sb.append("哈哈哈");
  28.         sb.append("呵呵呵");
  29.         sb.append("嘿嘿嘿");
  30.         System.out.println(sb);
  31.         
  32.         int[] in={1,2,3,4,5};
  33.         System.out.println(in);

  34.         String[] s1={"aaa","ddd","abc"};
  35.         System.out.println(s1);

  36.         byte[] by={'r','m','n'};
  37.         System.out.println(by.toString());
  38.         }
  39.         
  40.         public String toString()
  41.         {
  42.         return "xxxxx";
  43.         }
  44. }
复制代码

作者: 陈圳    时间: 2013-5-2 17:28
本帖最后由 陈圳 于 2013-5-2 17:31 编辑

不通过循环可以打印出来,你可以使用Arrays.toStrin()方法完成打印输出,但它底层肯定也是通过循环来实现的.数组本身就是一种需要有序的
第二个就是:数组的toString方法返回的就是type@16进制的地址值.
你的toString只限本类对象调用有效.你想用字节数组的引用对象调用你本类的toString方法实现一个类中对象调用的能实现的效果...如果有用那就逆天了.
toString可以自字义本类对象的输出信息.
如:person类有一个姓名与性别的属性
如果你复写toString方法:"姓名:"+this.name+" 性别:"+this.sex ,就可以println输出这个信息.而不用在println()语句里修饰.
作者: 殇_心。    时间: 2013-5-2 17:34
我的理解:
第一个问题:循环是必须的。
第二个问题:数组打印出来的是地址值。这是调用Object里面的toString方法。
第三个问题:你这里的toString仅仅是RandomAccessFileDemo这个类的方法,是覆盖了Object的方法。
            而你下面不是打印出你的东西,是因为byte这个类型的方法是继承Object方法。跟你的覆盖没一点关系。
           如果要你的方法有效,你可以创建RandomAccessFileDemo这个类的对象。然后打印。
           toString方法和new String(byte[] buf)区别:
           一个是调用方法。
           一个是new对象。
作者: 孙胜    时间: 2013-5-2 17:40
第一个问题:
打印数组可以这样:
T t[];
for(int i =0; i< t.length;i++)
    System.out.println(t[i]);


第二个问题:
打印数组默认调用的是Object的toString方法,所以打印的是地址的哈希值


第三个问题:
你自己定义的toString方法是RandomAccessFileDemo属于这个类
所以当然没效果
作者: ぺsimon☆    时间: 2013-5-2 23:37
谢谢各位兄弟





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