灵魂拷问:java对象转字符串,你真的用对方法了吗?

在平时的开发中,会遇到需要将对象转为字符串的情况,比较常用的3个方法是:(String)、String.valueOf、toString。这时可能有点懵,既然有三个方法,那他们有什么不同?什么时候该用哪个?

今天我们就来聊聊这三个方法的区别。

(String)

  • 类型强转,将Object强制转为String类型。但是并不是所有类型都能强转,需要注意的是类型原本就是字符串的对象才能转成String类型,否则会抛出ClassCastException异常。

  • 比如我们放入redis字符串,然后从redis拿出时是Object类型,这时就可以使用(String)强转。

  • 那当别人传过来一个Object,我也不知道它到底是不是字符串,怎么办?其实你可以先使用instanceof做一个类型检查,以判断是否可以进行强转,如下:

    public static void main(String[] args) {
        Object a="字符串";
        if(a instanceof String){
            System.out.println("我是字符串,可以强制为字符串");
            System.out.println((String) a);
        }else{
            System.out.println("我不是字符串,臣妾办不到");
        }
    }

toString

  • 在api文档中是这样说的:返回对象本身,也就是说对任何严格意义上的java对象都可以调用此方法,因为java.lang.Object类里已有public方法.toString()。

  • 但必须保证Object不是null值,不然会抛出NullPointerException异常,也就是平时常说的空指针异常

    public static void main(String[] args) {
        Object a=null;
        String s = a.toString();
        System.out.println(s);
    }

Exception in thread "main" java.lang.NullPointerException

  • 基本类型是没有toString

  • 所以在调用toString前,要先判断对象是否为空

    public static void main(String[] args) {
        Object a=getObject();
        if(null!=a){
            String s = a.toString();
            System.out.println(s);
        }
    }

String.valueOf

  • 这个方法是静态的,直接通过String调用,它是在toString的基础上实现的,但是不同的是,String.valueOf不用担心object是否为null,可以说很完美。从以下源码可以看到,valueOf已经做了空的判断。
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

  • 虽然帮我们自动判空了,但是也存在一定的隐患,你可能已经注意到返回的是字符串的“null”,而不是null
    //错误写法
    public static void main(String[] args) {
        Object a=null;
        if(String.valueOf(a)==null){
            System.out.println("空");
        }else{
            System.out.println("非空");
        }
    }
    //正确写法
    public static void main(String[] args) {
        Object a=null;
        if(String.valueOf(a)=="null"){
            System.out.println("空");
        }else{
            System.out.println("非空");
        }
    }

总结

以上就是对平时常用的对象转字符串的方法的介绍,个人建议使用String.valueOf来进行转换,这个方法安全可靠。

关注公众号:臻大虾,分享更多java后端干货
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值