对于字符串类型的转换,你可能见到过这几种写法,它们之间有什么区别呢?
首先,Java的八种类型:
-
基本数据类型分别是:int、short、float、double、long、boolean、byte、char;
-
它们的封装类分别是:Integer、Short、Float、Double、Long、Boolean、Byte、Character。
一、代码实例
1.基本类型
(1)基本类型没有toString() 方法
(2)String.valueOf()方法转String
int a =0;
String b = String.valueOf(a);
System.out.println(b);
0
(3) (String)类型强制转换
int a = 0;
String b = (String)a; // 无法编译,因为0无法转换为string类型
(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCastException
异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用。
instanceof 判断:
private static void test(){
Object a = 0;
if(a instanceof String){
String b = (String)a;
System.out.println(b);
}else{
System.out.println("error");
}
}
error
2. 封装类型
(1)toString() 方法
Integer a = 0;
String b = a.toString();
System.out.println(b);
0
封装类型是有toString() 方法的。
(2) String.valueOf()
可以。
(3)强转
封装类型也无法强转。需要做异常检查。
3. null问题
(1)toString() 报空指针异常
(2)String.valueOf()返回字符串“null”
(3)null 值强转成功
二、总结
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。
源码分析:String.valueOf()比toString多了一个非空判断。
3. (String)强转,不推荐使用
(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCastException异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用。