黑马程序员技术交流社区
标题:
两个打印方式的区别为什么结果是一样的/?有什么区别?
[打印本页]
作者:
唐永康
时间:
2012-11-27 18:34
标题:
两个打印方式的区别为什么结果是一样的/?有什么区别?
本帖最后由 唐永康 于 2012-11-27 18:36 编辑
/*
文本文件读取方式二:
读到缓冲区,数组里面去read(char[] buf);
*/
package io.practice;
import java.io.*;
public class Demo4
{
FileReader fr;
Demo4()
{
try
{
//创建文件读取流对象
fr = new FileReader("e:\\Demo.txt");
//读数据之前先做一个字符数组缓冲区,用于存储读取到的字符
//read(char[])返回的是读到的字符个数
char[] buf = new char[1024];
for(int ch=0;(ch=fr.read(buf))!=-1;)
{
// System.out.println(buf);
// System.out.println(new String(buf));
System.out.println(new String(buf,0,ch));
}
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
if(fr!=null)
{
try
{
fr.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
public static void main(String[] args)
{
new Demo4();
}
}
看上面的代码,红色的三行打印在控制台上的结果是一样的,有什么区别,搞不明白。
作者:
ljhheima
时间:
2012-11-27 19:05
本帖最后由 ljhheima 于 2012-11-27 19:07 编辑
我可以很老实地告诉你,它们没有区别,你爱用哪种就用哪种。
第一种是打印字符数组,字符数组和一般数组不同,它是打印数组中的字符
第二第三种方式是将数组转成字符串,一样的。
作者:
李润根
时间:
2012-11-27 19:16
第一种好像是输出数组的内存地址
第二种是把整个长度为1024的数组都输出
第三种是把数组的有效元素输出
作者:
tfy
时间:
2012-12-1 00:43
三种不同的方式让我们更能深刻理解String
作者:
tfy
时间:
2012-12-1 00:44
三种不同方式有时在特定的环境中可能会用到
作者:
崔洪全
时间:
2012-12-1 10:57
System.out.println(buf);
这句打印的是这个char型数组,在打印的时候,buf会自动调用toString()方法,将buf数组以字符串的方式打印出来
System.out.println(new String(buf));
这里面打印的就是一个字符串,不过不是自动调用toString()方法,而是人工调用new String(char[])的方法将数组buf转换为字符串以后再输出
System.out.println(new String(buf,0,ch));
这里面也是利用的String的构造函数new String(char[] value, int offset, int count)分配一个新的 String,它包含来自该字符数组参数的一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
参数:
value - 作为字符源的数组。
offset - 初始偏移量。
count - 长度。
这样就把buf的有效字符转换为字符串的形式后输出
作者:
崔洪全
时间:
2012-12-1 11:16
刚才的解释有点小误差,第一句错了,在此修正
System.out.println(buf);
这句打印的是这个char型数组,在打印的时候,会按顺序输出 buf 数组中的所有字符。
在这里不会自动调用toString方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2