目录

  • 前言
  • 代码示例
    • 基本类型
    • 包装类型
    • `null` 值问题
  • 源码
    • `toString()`
    • `String.valueOf()`
  • 小结
    • `toString()` 可能会抛空指针异常
    • `String.valueOf()` 推荐使用,返回字符串 `null`
    • `(String)` 不推荐使用

前言

将对象转为 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 异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用

(String)、toString()、String.valueOf区别相关推荐

  1. toString与valueOf区别

    对应视频分享:点击进入 基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null和undefined除外.它们俩解决javascript值运算与显示的问题, ...

  2. 彻底了解toString和valueOf区别

    toSring和valueof 两者都是对象的方法!前者返回对象的字符串,后者返回对象的原始值,如果没有原始值则返回对象本身! 1.toSring() 直接看代码 console.log((1).to ...

  3. toString()、String.valueOf()、(String) 强转的区别

    在实际开发中,少不了使用这三种方法对某一个类型的数据进行转 String 的操作,那么什么情况下使用哪种方法更快捷,以及这些方法使用时的一些注意事项都有哪些呢?这篇文章参考自<掘金>上大佬 ...

  4. 关于 java.toString() ,(String),String.valueOf的区别

    今天,在群里有一个妹子问我一个问题,我开始时草草帮她解答,后来她说她还是没懂,然后自己仔细看了看,才发现自己其实更本没说清楚其中的道理,在查看源代码和API然后在网上看看前辈们的文章才知道了,这个问题 ...

  5. 通过char[]获得字符串new String(chars) || chars.toString() || String.valueOf(chars)对比

    今天刷Leecode49. 字母异位词分组,遇到一个通过char[]获得字符串的问题,记录一下new String(chars) || chars.toString() || String.value ...

  6. JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能

    JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...

  7. String与StringBuffer的区别

    String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. St ...

  8. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  9. Java中stringbutter_java中string与ButterString的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  10. java stringbuffer原理_深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)

    String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...

最新文章

  1. C++关键字decltype
  2. mysql 替换某个字段中的某个字符
  3. 【PaddlePaddle系列】报错解决方法合集 (不定时更新)
  4. python自学网站推荐-有哪些值得推荐的Python学习网站?
  5. python_day2_数据格式
  6. 玩转博客园的5个小技巧
  7. mysql最大连接数512_MySQL服务器最大连接数怎么设置才合理
  8. 使用IntelliJ ..达2周,到目前为止一切正常
  9. 软件质量管理之困境与对策思考
  10. 【2019.09.08】2019icpc南昌网络赛
  11. mysql 提高恢复速度_如何有效地提高 MySQL 的备份和恢复速度?
  12. 《数据结构与抽象:Java语言描述(原书第4版)》一1.1 什么是包
  13. 论文赏析[COLING18]两种成分句法分析的局部特征模型
  14. python函数式编程-装饰器
  15. 解决IE7中移动文件夹无法收藏问题
  16. 几组数据的相关性python_几的笔顺 笔画数:2 拼音:jī,jǐ 部首:几 - 智慧山
  17. CocosCreator之KUOKUO趣味文章:小怪要绕墙 3
  18. 陀螺仪随机误差的Allan方差分析
  19. ES8新特性 async,await实现异步
  20. java按照多个分隔符分割字符串

热门文章

  1. 翻译: 如何使用 Xcode 的内存图调试器检测 iOS 内存泄漏并保留周期
  2. 翻译:Vim从入门到精通 Mac OS
  3. 利用Python连接MySQL将表单转化为DataFrame
  4. mysql-bin position_MySQL基于binlog-position的复制
  5. 2021-09-02Hive 未被external修饰的是内部表,被external修饰的是外部表
  6. 2021-08-25剑指 Offer 13. 机器人的运动范围
  7. java多线程(1)----多线程的概述
  8. 斯坦福公开课《机器学习》第五章SVM笔记
  9. 关于Activity的四种启动模式详解
  10. android studio for android learning (八)开机启动界面splashActivity