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
不是报错,算一种提示/警告。。。表示一直为false
或true
,在 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多了一个非空判断。
如果传进来的
Obj
是null
的话,它直接返回"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