关于toString()的小细节

 

3. toString()方法
3.1 toString()的使用:
1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
*
* 2. Object类中toString()的定义:
* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*
* 3. 像String、Date、File、包装类等都重写了Object类中的toString()方法。
* 使得在调用对象的toString()时,返回"实体内容"信息
*
* 4. 自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"
3.2 如何重写toString()
举例:
//自动实现
@Override
public String toString() {
return "Customer [name=" + name + ", age=" + age + "]";
}

 

当我们输出一个对象的引用时,实际上就是调用当前对象的toString()

例子:

//关于toString()
    @Test
    public void test3(){
        String s = "abc";
        s = null;
        System.out.println(s);//null
        System.out.println("*********");
        System.out.println(s.toString());//出现NullPointerException
    }

 

问题:为什么System.out.println(s)输出的是null,而System.out.println(s.toString())输出的却是NullPointerException(空指针异常)

回答:

 

进入查看string中的println的源码

 

 进去查看print()的源码

 

 可以看到这里有一个保护机制,如果形参s为空,则输出"null"字符串而不是报空指针异常

s.toString()

则会指向空指针

 

posted @ 2021-03-29 14:51  小白冲  阅读(241)  评论(0编辑  收藏  举报