容易忽视的toString方法 (转)

原创 2005年02月28日 10:45:00

先看一段程序
/*
 * Created on 2005-2-24
 */

/**
 * @author snowway
 */
public class A{

    private String id;

    public String toString(){
        return this.id;
    }

    public static void main(String[] args){
        System.out.println(new A());
    }
}

原来我想当然以为会打印null,可运行结果是:
Exception in thread "main" java.lang.NullPointerException
 at java.io.Writer.write(Writer.java:126)
 at java.io.PrintStream.write(PrintStream.java:457)
 at java.io.PrintStream.print(PrintStream.java:616)
 at java.io.PrintStream.println(PrintStream.java:753)
 at A.main(A.java:17)

仔细debug后才知道流程是这样的:
首先调用PrintStream.println(Object)方法,println(Object)调用PrintStream.print(Object)方法,这个方法使用了String.valueOf(Object)来
获取对象的字符串输出,我们看看String.valueOf(Object obj)源码:
 public static String valueOf(Object obj) {
      return (obj == null) ? "null" : obj.toString();
 }

没有问题,由于我们传递的new A()!=null,所以调用new A().toString(),那么此时toString返回的是this.id,很显然是null,
最后println调用了write(str, 0, str.length());呵呵,问题出来了,str==null,那么str.length显然是要抛出NPE的。

给我的教训是:千万不要让类的toString方法返回null!

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

重写toString和equals方法

  • 2013年06月04日 21:28
  • 15KB
  • 下载

【转帖】HttpClient容易忽视的细节——连接关闭

Java代码   HttpClient client = new HttpClient();   HttpMethod method = new GetMethod("http://w...

数组、容器类(List\Set\Map)等的toString方法

import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util....
  • wwww4
  • wwww4
  • 2015年07月04日 01:27
  • 2965

关于重写toString方法

关于重写toString

Java重写ToString()方法的意义

1、toString()就是是重写,对于一般的对象来说都会有这个方法,其实这个方法的目的,主要就是将对象按字符串的方式输出出来:打个比方,比如一个People类,里边有name,age这两个属性, ...

JAVA中toString方法的作用

JAVA中toString方法的作用   因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。   它通常只是为了方便输出,比如Syst...

对所用对象的通用方法 - toString(), clone()

知识点: 1.建议所有子类都覆盖toString()方法。 2.Object, Integer, String的toString()方法。 3.怎么实现clone方法。 4.深clone和浅clone...

java各种toString方法

java的根类: Object Java代码   /* getClass().getName() + '@' + Integer.toHexString(hashCode())...
  • xjbclz
  • xjbclz
  • 2016年10月23日 21:38
  • 1021

Java的打印对象和toString方法

一 概念简介 1、打印对象和toString方法:toString方法是系统将会输出该对象的“自我描述”信息,用以告诉外界对象具有的状态信息。 2、Object 类提供的toString方法总是返...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:容易忽视的toString方法 (转)
举报原因:
原因补充:

(最多只允许输入30个字)