这就是头条三面?可能吗?
最近看到这样一个问题,说toString()、String.valueOf、(String)强转,有啥区别?重点是说,这是头条三面?
咱也不知道真的假的,那就分析分析这个问题吧!
直观分析首先我们看这三头货,什么toString()、String.valueOf、(String)强转?有啥区别?就问你是不是很像,是不是都有一个String?
说白了,这三个都是将XX给变成String,简称变身String的方法
接下来一个一个的分析下!
toString()
这个方法真正做到那种见名知意,也就是看到这个名字,我就知道它是干嘛的,所以平常咱们在命名的时候也要注意,你起的名字要有意义,看到这个名字我知道这个东西有什么用~
别一上去就整个:yydf
这啥玩意?你是要整个yyds,整个全世界最厉害的类,然后一不小心,手抖敲错字母了吗?
接着来看我们的toString,这玩意怎么用?
Integer a = 666;
a.toString();
我们应该比较熟悉这种,就是在一些JavaBean中也就是我们的实体类或者pojo中:
这里的toString其实是重写了Objec类中的toString:
也即是说,如果你自己定义一个类,使用toString的话,那就是直接调用Objec类中的该方法了,但是一般我们都会重写该方法,比如integer这个包装类中:
发现这里的toString就与Objec中的不一样,进行了重写,我们可以这样使用:
Integer a = 666;
String b = a.toString();
因为在Object中含有toString方法,又因为Object是所有类的父类,因此,所有的引用类型都可以使用toString方法,只不过大部分派生类都会重写该方法!
在Java中,数据分为基本数据类型和引用数据类型,而基本类型是无法使用toString方法的:
不过在使用toString的时候我们要注意一下null值的问题:
比如这样的情况,编译是没问题的,但是运行就报错了:
所以这里一定要注意,不然就掉坑了!
那对于toString这个方法,所有的引用类型都可以使用,大部分派生类会重写,使用要注意null问题,不然就会遇到空指针异常!
鉴于大部分人都是不认真的,所以一般就不推荐使用该方法了,但是如果有些情况使用toString性价比更高的话,那就用呗,做人,不能太死板了!
String.valueOf()
该方法属于String中的一个静态方法,使用起来相对来说会方便点,嗯,是这么回事:
而且我们发现,对于基本类型,这个方法也是可以进行String的转变的,我们可以看下它的源码:
发现没有,当我们传入的是一个基本类型的时候,实际上最终还是调用的toString:
我们发现在String当中这是一个重载函数,而且其中一个可以传入Object作为参数,这说明啥?
也就意味着,啥玩意都可以往里面放,都可以帮助你转变成String,我们试下:
输出结果:
再看下null值问题:
输出结果:
发现没有,并没有给你报错,而是给你返回了一个字符串“null”,看源码:
原来这里是做了判空处理的,这个要比直接调用toString更加的安全了!
总结来说,就是String.valueOf()方法不仅可以用于引用类型,也可以用于基本类型(实际调用的是其包装类),不放实际上都是调用了toString方法,不过在以Object为参数的方法中增加了盼空处理,避免了空指针异常!
所以,一句话:
String.valueOf()方法比toString()方法好用,推荐
(String)强转
对于这种强转形式,大家应该对基本类型的强制转换比较熟悉,见的也比较多,其实吧,在基本类型中进行强制转换还可以……
但是吧,这个字符串强转真不咋地,也不怎么推荐使用,你看:
表面来看,想基本类型和引用类型都是无法进行强转的,不过对于Object类型在编译的时候并没有什么问题,但是,这可不代表运行无错啊:
发现会报一个类型转换错误,也就是无法转换,不过对于null值问题:
发现这个对于null是可以强转的,一般在使用这个强转的时候,我们可以这样:
看下结果:
是不是更加友好,避免报错,所以在使用强转的时候,我们可以使用instanceof来进行类型检查,得到一个更加友好的提示!
不过,一般来说,还是不太推荐使用强转,就冲这名字,它就不太靠谱,你觉得呢?
+“”
这是啥呢?看:
运行也是没错的:
这种方式用过吗?
其实这种方式就相当于字符串直接拼接,对于这种形式我们可以反编译一个代码看看:
其实也就是先创建一个StringBuilder,然后通过append的方式拼接两个变量,最后在调用toString的方式!
对于这种方式,其实是不太建议的,因为它的效率不太行,也就是不建议直接拼接字符串的!
OK,如果你对字符串拼接比较感兴趣,可以私下自行研究下,今天的分享就到这里了!
可以说下,你都是使用哪种方式呢?
end
精品资源,超多福利,加微信免费领取
长安添加下方·二维码
领取庆哥的编程自学秘籍(PDF电子书
),朋友圈每天更新
常驻小尾巴
往期精彩推荐