java (String)强制转换与toString()方法

1. Object.toString()介绍

Object中是自带有toString()方法的,也就是说java中的所有类的对象都是可以转换为字符串的。

首先,先看看Object.toString()的默认实现

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

默认的toString是返回 类名 + @ + HashCode值
Member.java

class Member {
    private String name;

    public static void main(String[] args) {
        Member member = new Member();
        System.out.println(member.toString());
    }
}

控制台输出如下图

2. (String)强制转换 与 toString()

当Object向下转型为String时,可以使用(String)做强制类型转换。

但如果其他对象转为String,则需要使用toString()方法,一般为了方便使用,toString()方法都是要在子类中重写。

class Member {
    // Object 是所有类的傅雷,此处为了方便使用,重写了toString()方法
    @Override
    public String toString() {
        return "Member{这是一个Member}";
    }
}

public class StringTest {
    public static void main(String[] args) {
        // 向上转型
        Object objA = "Hello";
        Object objB = new Member();

        // 使用(String)强转
        String strA = (String) objA;
        // 使用重写后的toString()转为String
        String strB = objB.toString();

        System.out.println(strA);
        System.out.println(strB);

        Member memA = (Member) objB;
        System.out.println(memA);

    }
}

控制台输出如下:

3. (String) 存在的问题

当Stirng为null时,(String)的强制转换会有空指针报错NullPointerException

class StringTest2 {
    public static void main(String[] args) {
        String s1 = null;
        Object obj = s1;

        String s2 = obj.toString();
        System.out.println(s2);

        String s3 = (String) obj;
        System.out.println(s3);
    }
}

控制台报错

4. 推荐使用

保险的做法是:使用强制转型,在确定不为空的情况下,两种方式对String操作效果是一样的(只有String是,其它的类都没有,其它的类如果要变为指定类型只能够使用强制向下转型)。

posted @ 2022-12-06 14:20  向宁的光  阅读(1325)  评论(0)    收藏  举报