王金科 发表于 2012-8-21 19:35
System.out.println(bos.toString());
System.out.println(bos);
这两句话打印效果一模一样,那还不如省掉 ...
王少岩 发表于 2012-8-21 19:46
首先要搞清楚println的执行过程源码里面很清楚:
PrintStream(System.out):
public void println(Obje ...
复制代码
- import java.io.*;
- public class ByteArrayStreamDemo
- {
- public String toString()
- {
- return "ByteArrayStreamDemo类的自定义toString()方法";
- }
- public static void main(String[] args) throws IOException
- {
- //数据源
- ByteArrayInputStream bis = new ByteArrayInputStream("abcdef".getBytes());
- //数据目的地
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- int by = 0;
- while((by=bis.read())!=-1)
- {
- bos.write(by);
- //System.out.println(bos);
- }
- ByteArrayStreamDemo bas = new ByteArrayStreamDemo();
- System.out.println(bos.size());//输出:6
- //------------------------------------当API中的类对象自带toString()方法时-----------------------------------------------------------------------
- /*虽然ByteArrayStreamDemo类中覆写了toString()方法,但只对当前类对象有效,并未覆写其他类中的toString().
- ByteArrayOutputStream有自带的toString()方法,与Object父类中的toString()方法不同
- ByteArrayOutputStream类的toString()方法使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。*/
- System.out.println(bos.toString());//输出:abcdef
- //System.out.println()语句会自动调用ByteArrayOutputStream类中的自由toString()方法,同上
- System.out.println(bos);//输出:abcdef
- //------------------------------------当自定义类对象覆写toString()方法时-----------------------------------------------------------------------
- /*ByteArrayStreamDemo类中覆写了toString()方法,所以当类的实例化对象调用toString()是返回自定义toString()方法的值*/
- System.out.println(bas.toString());//输出:byteArrayReaderDemo类的自定义toString()方法
- //System.out.println(bas);语句自动调用本类中的toString()方法,同上。
- //System.out.println()语句会自动调用自定义ByteArrayStreamDemo类中的自定义toString()方法,同上
- System.out.println(bas);//输出:byteArrayReaderDemo类的自定义toString()方法
- //-------------------------------------当自定义类对象没有toString()方法时--------------------------------------
- /*虽然ByteArrayStreamDemo类中覆写了toString()方法,但只对当前类对象有效,并未覆写其他类中的toString().
- CharArrayReaderDemo自定义类中没有toString()方法,但其Object父类中有toString()方法,故此时调用了Object类中的toString(),
- Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。
- 换句话说,该方法返回一个字符串,它的值等于:CharArrayReaderDemo@152B6651 */
- System.out.println(new CharArrayReaderDemo().toString());////输出:CharArrayReaderDemo@152B6651
- //System.out.println()语句会自动调用自定义父类Object类中的toString()方法,同上。
- System.out.println(new CharArrayReaderDemo());//CharArrayReaderDemo@152B6651
- //------------------当System.out.println()中输出的为基本数据类型,对象中的字段,引用类型中的元素时------------------------------
- /*
- 基本数据类型不能直接调用toString()方法,必须转换成包装类后才可调用。
- */
- System.out.println(1);//输出1 相当于System.out.println(1+"")
- System.out.println(new Integer(1));//输出:1 相当于System.out.println(new Integer.toString())
- System.out.println(new Integer(1).toString());//输出1
- //演示类CharArrayReaderDemo中的方法
- new CharArrayReaderDemo().carDemo();
- }
- }
- class CharArrayReaderDemo {
- /**
- * @param args
- * @throws IOException
- */
- public static void carDemo() throws IOException {
- // TODO Auto-generated method stub
- CharArrayReader cr = new CharArrayReader("ASasdsadas".toCharArray());
- CharArrayWriter cw = new CharArrayWriter();
- int len = 0;
- while((len=cr.read())!=-1){
- cw.write(len);
- //System.out.println(cw);
- }
- System.out.println(cw.size());//输出:10
- //------------------------------------当API中的类对象自带toString()方法时-----------------------------------------------------------------------
- /*虽然ByteArrayStreamDemo类中覆写了toString()方法,但只对当前类对象有效,并未覆写其他类中的toString().
- CharArrayWriter有自带的toString()方法,与Object父类中的toString()方法不同
- CharArrayWriter类的toString()方法使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。*/
- System.out.println(cw.toString());//输出:ASasdsadas
- //System.out.println()语句会自动调用CharArrayWriter类中的自由toString()方法,同上
- System.out.println(cw);//输出:ASasdsadas
- }
- }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |