这就是头条三面?可能吗?

共 2158字,需浏览 5分钟

 ·

2022-03-22 13:12

最近看到这样一个问题,说toString()、String.valueOf、(String)强转,有啥区别?重点是说,这是头条三面?

咱也不知道真的假的,那就分析分析这个问题吧!

直观分析

首先我们看这三头货,什么toString()、String.valueOf、(String)强转?有啥区别?就问你是不是很像,是不是都有一个String?

说白了,这三个都是将XX给变成String,简称变身String的方法

接下来一个一个的分析下!

toString()

这个方法真正做到那种见名知意,也就是看到这个名字,我就知道它是干嘛的,所以平常咱们在命名的时候也要注意,你起的名字要有意义,看到这个名字我知道这个东西有什么用~

别一上去就整个:yydf

6e9342e35ec857e11f5a38ba34aa724b.webp

这啥玩意?你是要整个yyds,整个全世界最厉害的类,然后一不小心,手抖敲错字母了吗?

接着来看我们的toString,这玩意怎么用?

Integer a = 666;  
a.toString();

我们应该比较熟悉这种,就是在一些JavaBean中也就是我们的实体类或者pojo中:7fd3ebb55f562b394d5d7dec823a5f38.webp

这里的toString其实是重写了Objec类中的toString:

18a3beaef277805dc5fd0712c6edd724.webp

也即是说,如果你自己定义一个类,使用toString的话,那就是直接调用Objec类中的该方法了,但是一般我们都会重写该方法,比如integer这个包装类中:d6a59f49280c3005de184526a1e737f7.webp

发现这里的toString就与Objec中的不一样,进行了重写,我们可以这样使用:

Integer a = 666;  
String b = a.toString();

因为在Object中含有toString方法,又因为Object是所有类的父类,因此,所有的引用类型都可以使用toString方法,只不过大部分派生类都会重写该方法!

在Java中,数据分为基本数据类型和引用数据类型,而基本类型是无法使用toString方法的:

b459298595d63ad071fb949421705233.webp

不过在使用toString的时候我们要注意一下null值的问题:

e39ca9ec89292b400fa23ee130271876.webp

比如这样的情况,编译是没问题的,但是运行就报错了:

074acbbc98892c980cc437af5fc5b29d.webp

所以这里一定要注意,不然就掉坑了!

那对于toString这个方法,所有的引用类型都可以使用,大部分派生类会重写,使用要注意null问题,不然就会遇到空指针异常!

鉴于大部分人都是不认真的,所以一般就不推荐使用该方法了,但是如果有些情况使用toString性价比更高的话,那就用呗,做人,不能太死板了!

String.valueOf()

该方法属于String中的一个静态方法,使用起来相对来说会方便点,嗯,是这么回事:

f461eaf2e509245ad5070dec1bd572fe.webp

而且我们发现,对于基本类型,这个方法也是可以进行String的转变的,我们可以看下它的源码:

efeb87573838d183f35ce60ab996a814.webp

发现没有,当我们传入的是一个基本类型的时候,实际上最终还是调用的toString:

b5787c76315eebb8e6edbeb56b90c32b.webp

我们发现在String当中这是一个重载函数,而且其中一个可以传入Object作为参数,这说明啥?

也就意味着,啥玩意都可以往里面放,都可以帮助你转变成String,我们试下:

53c9862192a7fd4b5c984fa141dbd7a8.webp

输出结果:

a63e507a96e0845e2bc5031f123e85c8.webp

再看下null值问题:

7e673a1995099ff1288948d1983aa55e.webp

输出结果:

131890e4a0b42f796bdaaa53d6bd0d29.webp

发现没有,并没有给你报错,而是给你返回了一个字符串“null”,看源码:

977530813be2eb845dc18cf9b3ee2646.webp

原来这里是做了判空处理的,这个要比直接调用toString更加的安全了!

总结来说,就是String.valueOf()方法不仅可以用于引用类型,也可以用于基本类型(实际调用的是其包装类),不放实际上都是调用了toString方法,不过在以Object为参数的方法中增加了盼空处理,避免了空指针异常!

所以,一句话:

String.valueOf()方法比toString()方法好用,推荐

(String)强转

对于这种强转形式,大家应该对基本类型的强制转换比较熟悉,见的也比较多,其实吧,在基本类型中进行强制转换还可以……

但是吧,这个字符串强转真不咋地,也不怎么推荐使用,你看:

c8a712becb3c711456eb6b7bd82bd134.webp

表面来看,想基本类型和引用类型都是无法进行强转的,不过对于Object类型在编译的时候并没有什么问题,但是,这可不代表运行无错啊:

fa131dacc901ced7fc02dbefed6df301.webp

发现会报一个类型转换错误,也就是无法转换,不过对于null值问题:

8e80a792037648814db7d66dd5170b20.webp

发现这个对于null是可以强转的,一般在使用这个强转的时候,我们可以这样:

bf688913d365ab9c416df10e361d6b5e.webp

看下结果:

3a17a93c3037e93d89de6e71b285c9d8.webp

是不是更加友好,避免报错,所以在使用强转的时候,我们可以使用instanceof来进行类型检查,得到一个更加友好的提示!

不过,一般来说,还是不太推荐使用强转,就冲这名字,它就不太靠谱,你觉得呢?

+“”

这是啥呢?看:

13285465eecedf3944a67e10c7acb6ff.webp

运行也是没错的:

291edfbe68c0976a43eea12759d0b22c.webp

这种方式用过吗?

其实这种方式就相当于字符串直接拼接,对于这种形式我们可以反编译一个代码看看:

b98128535660a85e55b58f383d6ae445.webp


其实也就是先创建一个StringBuilder,然后通过append的方式拼接两个变量,最后在调用toString的方式!

对于这种方式,其实是不太建议的,因为它的效率不太行,也就是不建议直接拼接字符串的!

OK,如果你对字符串拼接比较感兴趣,可以私下自行研究下,今天的分享就到这里了!

可以说下,你都是使用哪种方式呢?

end


精品资源,超多福利加微信免费领取


长安添加下方·二维码

领取庆哥的编程自学秘籍PDF电子书),朋友圈每天更新

常驻小尾巴


往期精彩推荐

6a21f9d618faa5caaa234eb8c778e30a.webp

我已经不用 try catch 处理异常!太辣鸡了!


23c8e4dff5197393723c35563fa28dc8.webp

typora最佳替代品


fb68ece15cb42ba3d0323657f1182de4.webp

聊聊编程学习的方式,途径

浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐