网站首页 > 精选教程 正文
在平时的开发中,会遇到需要将对象转为字符串的情况,比较常用的3个方法是:(String)、String.valueOf、toString。这时可能有点懵,既然有三个方法,那他们有什么不同?什么时候该用哪个?
今天我们就来聊聊这三个方法的区别。
(String)
- 类型强转,将Object强制转为String类型。但是并不是所有类型都能强转,需要注意的是类型原本就是字符串的对象才能转成String类型,否则会抛出ClassCastException异常。
- 比如我们放入redis字符串,然后从redis拿出时是Object类型,这时就可以使用(String)强转。
- 那当别人传过来一个Object,我也不知道它到底是不是字符串,怎么办?其实你可以先使用instanceof做一个类型检查,以判断是否可以进行强转,如下:
public static void main(String[] args) {
Object a="字符串";
if(a instanceof String){
System.out.println("我是字符串,可以强制为字符串");
System.out.println((String) a);
}else{
System.out.println("我不是字符串,臣妾办不到");
}
}
toString
- 在api文档中是这样说的:返回对象本身,也就是说对任何严格意义上的java对象都可以调用此方法,因为java.lang.Object类里已有public方法.toString()。
- 但必须保证Object不是null值,不然会抛出NullPointerException异常,也就是平时常说的空指针异常
public static void main(String[] args) {
Object a=null;
String s = a.toString();
System.out.println(s);
}
Exception in thread "main" java.lang.NullPointerException
- 基本类型是没有toString
- 所以在调用toString前,要先判断对象是否为空
public static void main(String[] args) {
Object a=getObject();
if(null!=a){
String s = a.toString();
System.out.println(s);
}
}
String.valueOf
- 这个方法是静态的,直接通过String调用,它是在toString的基础上实现的,但是不同的是,String.valueOf不用担心object是否为null,可以说很完美。从以下源码可以看到,valueOf已经做了空的判断。
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
- 虽然帮我们自动判空了,但是也存在一定的隐患,你可能已经注意到返回的是字符串的“null”,而不是null
//错误写法
public static void main(String[] args) {
Object a=null;
if(String.valueOf(a)==null){
System.out.println("空");
}else{
System.out.println("非空");
}
}
//正确写法
public static void main(String[] args) {
Object a=null;
if(String.valueOf(a)=="null"){
System.out.println("空");
}else{
System.out.println("非空");
}
}
总结
以上就是对平时常用的对象转字符串的方法的介绍,个人建议使用String.valueOf来进行转换,这个方法安全可靠。
关注公众号:臻大虾,分享更多java后端干货
- 上一篇: Java 实例 java 实例方法
- 下一篇: Java--转换流详解 java转换int
猜你喜欢
- 2024-11-03 4.5 Java的字符串操作和方法 java字符串使用教学
- 2024-11-03 一文教你Java字符串处理(String,StringBuffer...
- 2024-11-03 「Java工具类」Jackson工具类,json字符串转各种对象或者集合
- 2024-11-03 java int类型转char类型总结 java将int转换为char
- 2024-11-03 《JAVA编程思想》5分钟速成:第13章(字符串)
- 2024-11-03 Java字符串操作的函数式方法 java中字符串的操作
- 2024-11-03 Java基于代码实战的字符流父类、字符转换流、缓冲字符流、过滤流
- 2024-11-03 7. 反转整数(LeetCode 题解) 反转整数python
- 2024-11-03 JAVA 基本类型之间的转换(新手) java基础类型转换
- 2024-11-03 Java读取制表符文本转换为JSON java读取表格
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)