(String)、toString()、String.valueOf区别

43 篇文章 1 订阅

前言

将对象转为 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 调用即可,只是有一点需要注意,就是上面提到的,如果为 nullString.valueOf() 返回结果是字符串 “null”。而不是 null

(String) 不推荐使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值