容易忽视的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
  • 下载

C# 中ToString的常用方法

字符型转换为字符串 // C 货币2.5.ToString("C"); // ¥2.50// D 10进制数25.ToString("D5"); // 25000// E 科学型25...

Hibernate一对一双向关联映射以及相互引用toString()方法的错误原因

问题引入:首先我们搭建hibernate一对一双向关联关系,在我们建立hibernate一对一双向关联之后不能再toString()方法中相互引入,否则会报StackOverFlowError,也就是...

采用commons-lang.jar包实现equals,hashCode以及toString方法

通过commons-lang.jar包实现一个javabean的equals,hashCode和toString三个方法,一般情况下,用手工直接实现这三个方法比较繁琐, 而采用common-lang...

覆盖Object类的equals、hashCode和toString方法

1.equals方法 equals方法和“==”进行比较的时候,引用类型数据比较的是引用,即内存地址,基本数据类型比较的是值。 下面进行覆盖此方法,使其只比较对象属性值。 ...

javascript中的toString()方法

javascript中的toString()方法,主要用于Array、Boolean、Date、Error、Function、Number等对象。下面是这些方法的一些解析和简单应用,做个纪律,以作备忘...

JAVA中toString方法的作用

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

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

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

C#控制台基础 为什么可以重写ToString方法

镇场诗:慈心积善融学习,技术誓为大家学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 ——————————————————————————————————————————————...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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