toString()、String.valueOf、(String)强转,有啥区别?

1 前言

注: 原文中 IDEA 2021.1,jdk 1.8

相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢?

2 代码实例

2.1 基本类型

1、基本类型没有toString()方法

 

 

2、String.valueOf(Obj) 推荐使用

 

3、无法强转

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

TIP

IDEA 版本过高的会有警告

 

instanceof判断

Object obj = 1;
if (obj instanceof String){
    String str = (String) obj;
    System.out.println("yes");
}else
    System.out.println("no");

TIP

在做 instanceof/ if 判断的时候,IDEA 也会给出警告,低版本没用过,欢迎大家留言!

2.2 封装类型

1、toString()

 

 封装类型是可以使用toString()方法的

2、String.valueOf()

自然是可以的 (๑•̀ㅂ•́)و✧)

3、封装类型也无法强转

 

TIP

基础知识较好同学,应该知道,竟然封装类型可以进行 toString 转换,那基本类型就可以通过封装类型达到 toString

基础查的也没关系,下列文稿有代码实例:

long l = 1L;
String s = Long.toString(1);
System.out.println(s);
  • 这里涉及到拆箱装箱,有兴趣的小伙伴可以去详细了解了解,就不多讲解了

2.3 Null值问题

1、toString()报空指针异常

细心的小伙伴应该发现了,toString 方法有警告线,所以这么暖心、好用的 IDEA 你不用起来?

2、String.valueOf()返回字符串 "null"

s == null 不是报错,算一种提示/警告。。。表示一直为 falsetrue,在 instanceof判断 中有讲。

3、Null值强转成功

这里也是提示/警告,如果看着不爽,咱们把它镇压掉,只需应该注解 @SuppressWarnings("all")

烦人的警告就没用了(๑•̀ㅂ•́)و✧)。。

  • @SuppressWarnings("all") 表示镇压test01 类下所有警告,有兴趣的小伙伴可以去详细了解

3 源码分

3.1 toString()

它这里调用另一个重载 toString 方法,我们跟进一下。。。

这段代码的意思是:

返回表示指定整数的String对象。参数被转换为带符号的十进制表示,并作为字符串返回,就像参数和基数10作为参数提供给toString(int, int)方法一样。
参数: 
i -一个要转换的整数。
返回:
以10为基数的参数的字符串表示形式。

3.2、String.valueOf()

 

String.valueOf()比toString多了一个非空判断。

如果传进来的 Objnull 的话,它直接返回 "null" 字符串,否则调用 toString 方法。。。

这里可以看出使用,String.valueOf(obj) obj 为 null 返回字符串 "null"了,所有开篇,推荐大家使用valueOf。。

谁也不希望自己写着写着,突然报一个异常撒

4 总结

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

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

2、String.valueOf(),返回字符串 "null" 推荐使用

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

3、(String) 强转,不推荐使用

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

技术有限,如有错误,还望指出,互相学习,共同进步!

参考:http://blog.csdn.net/guorui_java/article/details/117935620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值