目录
前言
将对象转为 String
常用的方法有:(String) 要转换的对象
,Object.toString()
,String.valueOf(Object)
等
代码示例
基本类型
- 基本类型是没有
toString()
方法的 - 推荐使用
String.valueOf()
方法
public class StringTest {
public static void main(String[] args) {
int a = 10;
String s = String.valueOf(a);
System.out.println(s);
}
}
结果:
10
- 对于基本类型使用
(String)
是无法强转的
(String)
是标准的类型转换,将Object
类型转为String
类型,使用(String)
强转时,最好使用instanceof
做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCastException
异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用
public class StringTest {
public static void main(String[] args) {
Object a = 10;
String str = (String)a;
System.out.println(str);
}
}
结果:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
使用 instanceof
做一个类型检查
public class StringTest {
public static void main(String[] args) {
Object a = 10;
if (a instanceof String) {
String str = (String) a;
System.out.println(str);
} else {
System.out.println("error");
}
}
}
结果:
error
包装类型
- 包装类型是可以使用
toString()
方法的
public class StringTest {
public static void main(String[] args) {
Integer a = 10;
String s = a.toString();
System.out.println(s);
}
}
结果:
10
String.valueOf()
方法自然也是可以的- 包装类型使用
(String)
是无法强转的
null
值问题
toString()
报空指针异常
public class StringTest {
public static void main(String[] args) {
Integer a = null;
String s = a.toString();
System.out.println(s);
}
}
结果:
Exception in thread "main" java.lang.NullPointerException
String.valueOf()
返回字符串null
public class StringTest {
public static void main(String[] args) {
Integer a = null;
String s = String.valueOf(a);
System.out.println(s);
System.out.println(s == null);
System.out.println(s.equals("null"));
}
}
结果:
null
false
true
- 使用
(String)
导致null
值强转成功
public class StringTest {
public static void main(String[] args) {
Object obj = null;
String str = (String)obj;
System.out.println(str);
}
}
结果:
null
源码
toString()
Integer
类重写 Object
类的 toString()
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
String.valueOf()
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
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
异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用