开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:String 转换】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/492
String 转换
内容介绍
一、String 转换
一、String 转换
用(String)强转,什么场景使用 toString() 强转?
Object 类之中提供有一个 toString() 方法,那么也就意味着所有类的对象都具有此方法。
那么对于此方法只有一个核心作用:在于将对象的内容变为字符串。
首先来观察一下 Object.toString() 方法的实现:
public String toString() {
return getClass().getName()+
”@”+Integer.toHexString(hashCode());
}
如果说现在发生了 String 向 Object 类的向上转型(不去考虑出于什么样原因才需要进行转型)
package cn.mldn.demo;
class Member {
@Override
Public String toString() {
Return
”是一个人。”;
}
}
public class TestStringType {
public static void main(String[ ] args) {
//
忽略转型的目的,只关心技术的实现
Object objA=
”Hello”; //String向Object转型,会使用不同的类加载器
Object objB=new Member(); //
自定义类,会使用不同的类加载器
//
要取出数据,需要考虑类型
String strA=(String) objA; //
获取内容
//String
是Object子类,所以现在的toString()调用的是String类被覆写的方法
String strB=objA.toString(); //
获取内容
System.out.println(strA); //
向下转型获得的
System.out.println(strB); //
通过子类方法覆写获得的
//
以上的两种处理方法一样,只限于系统提供String类,但是如果是自定义类
Member memA=(Member) objB; //
向下转型
System.out.println(memA.toString()); //
调用的是被子类所覆盖写过的方法
//
但是如果说你现在调用的是objB类的toString(),则就表示你要转换的类型不是Member,而是String
String str=objB.toString();
如果要是具体点说:使用 toString( )容易造成空指向异常;
package cn.mldn.demo;
public class TestStringType {
public static void main(String[ ] args) {
//
忽略转型的目的,只关心技术的实现
String str = null;
Object objA=str; //String
向Object转型,会使用不同的类加载器
//
要取出数据,需要考虑类型
String strA=(String) objA; //
获取内容
System.out.println(strA); //
向下转型获得的,null
//String
是Object子类,所以现在的toString()调用的是String类被覆写的方法
String strB=objA.toString(); //
获取内容
System.out.println(strB); //
通过子类方法覆写获得的
}
}
总结:如果你现在使用的是 String,那么在不为 null 的情况下,使用强制转型和 toString() 方法效果一样,但是如果为 unl l,则就会出现 NullPointerException,保险的做法是:使用强制转型,但是如果确定不为 unll 的情况下,则两种方式对 String 操作的效果是一样的(只有String是,其他的类都没有,其他的类如果要变为指定类型只能够使用强制向下转型)。