挑战头条三面?toString()String.valueOf(String)强转,有啥区别?

Posted 庆哥Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战头条三面?toString()String.valueOf(String)强转,有啥区别?相关的知识,希望对你有一定的参考价值。

最近看到这样一个问题,说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,如果你对字符串拼接比较感兴趣,可以私下自行研究下,今天的分享就到这里了!

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

以上是关于挑战头条三面?toString()String.valueOf(String)强转,有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

头条三面:toString()String.valueOf(String)强转,有啥区别?

头条三面技术四面HR

20180815头条三面-How_2_Play_Life

头条三面技术四面HR,彻底帮你搞懂

头条三面技术四面HR,看这一篇就够了

三面拼多多,挑战大厂重燃激情!