建议你去String.valueOf()

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

写在前面

当我们想要将一种非字符串类型的值去转换成字符串,都是怎么转的,你可能会toString(), 也可能String.valueOf(), 还有的可能强转(String),所以大家可能是随心所欲的使用的,不会在这几个当中犹豫,那有什么不同呢?

有一句话说的好,存在即是合理的,所以既然jdk出来这几种方法,那肯定有它存在的地方。那是否有优劣之分呢,平常开发中应该先考虑使用哪一种呢?

那我告诉你,建议你平常使用String.valueOf()。为啥呢,我们下面来理理。

我们分为两部分。先抛出问题实例,再深入源码。

代码实例

为了方便演示。我就直接截图了。这样能看的更清楚些

  • 1、首先看基本类型没有toString()方法

image.png

  • 2、但是可以使用String.valueOf()

image.png

感觉String.valueOf() 可以包含万物。推荐使用。

  • 3、试试强转

image.png

还是一样。基本类型 无法被强制转换掉,下面看看Object类 大家都知道 Object类是根类 所有的父类,它能往下走。能往下转,但是子类 怎么能”谋朝篡位“ 呢,所以肯定不行,报空

image.png

所以我建议:(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCastException异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用。

使用instanceof做一个类型检查

image.png

封装类型测试

上面我们用了int基本类型来进行测试的。下面我们用下封装类型Integer

image.png

与基本类型不同的是。 封装类型可用toString方法,String.valueOf(),自然也是可以的

image.png

下面看一种空指针问题

image.png

但是String.valueOf 是没有问题的

image.png

null值的转换问题

image.png

好的。代码实例 我们就写到这里。我们看下源码 为什么会出现上述情况,为什么我建议你去String.valueOf(),看源码

源码

先来看toString()的源码

image.png

image.png

String.valueOf的源码

image.png

可以明显的看到String.valueOf()比toString多了一个非空判断。

总结

  • toString(),可能会抛空指针异常

在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。

  • String.valueOf(),推荐使用,返回字符串“null”

String.valueOf()方法是小编推荐使用的,因为它不会出现空指针异常,而且是静态的方法,直接通过String调用即可,只是有一点需要注意,就是上面提到的,如果为null,String.valueOf()返回结果是字符串“null”。而不是null。

  • (String)强转,不推荐使用

(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCastException异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用。

OK。今天的学习就到这里。我们下期再见

弦外之音

感谢你的阅读,如果你感觉学到了东西,您可以点赞,关注。也欢迎有问题我们下面评论交流

加油! 我们下期再见!

给大家分享几个我前面写的几篇骚操作

copy对象,这个操作有点骚!

干货!SpringBoot利用监听事件,实现异步操作

猜你喜欢

转载自juejin.im/post/7036336689995841567
今日推荐