黑马程序员技术交流社区

标题: 滴滴面试被问到:为什么java中有不变类? [打印本页]

作者: sabrina妖儿    时间: 2015-11-10 22:03
标题: 滴滴面试被问到:为什么java中有不变类?
有谁可以详细地解释一下。
String 是个final的类。之后又有了StringBuffer 和StringBuilder   ,为什么不把String去掉,直接只要后两者呢,是什么原因让java这么做呢?
作者: xing912    时间: 2015-11-11 12:56
我是个菜鸟
作者: 记忆中的代码    时间: 2015-11-11 13:09
= =看看百度能不能找到答案,坐等大神解答
作者: dai2686779    时间: 2015-11-11 14:04
66666666666666666
作者: mashaladi    时间: 2015-11-11 17:04
很多方面吧,举一个方面就是效率吧,后两者的运行效率比前者要低很多。
作者: WosLovesLife    时间: 2015-11-11 18:12
线程安全,效率高。
作者: 冰霜之卅    时间: 2015-11-11 21:41
为什么不去掉我不知道。
我只知道Java   从来没有去掉过任何类, 就算是过时 也不作废。
作者: 陈琪    时间: 2015-11-11 22:13
不变类的意思就是不会发生变化的类,就是当类的实例被创建后,状态不会发生变化的类。
不变类有什么好处呢?
1、不变类是线程安全的,由于不变类的状态在创建以后不再发生变化,所以它可以在线程之间共享,而不需要同步。
2、不变类的instance可以被reuse
创建类的实例需要耗费CPU的时间,当这个实例不再被引用时,将会被垃圾回收掉,这时候,又需要耗费CPU的时间。对于不变类而言,一个好处就是可以将常用的实例进行缓存,从而减少了对象的创建。
作者: 陈琪    时间: 2015-11-11 22:15
String是一个不变类,仍然有replace,replaceAll这样的方法,而String仍然是一个不变类,那是因为在这些改变状态的方法中,每次都是新创建一个String对象。大家如果理解了不变类,那也就不难理解为什么在做String的concatenate时,应当用StringBuffer而不是用+的操作符。因为String是一个不变类,那么在做连接操作时,就会创建临时对象来保存中间的运算结果,而StringBuffer是一个mutable class,这样就不需要创建临时的对象来保存结果,从而提高了性能。
作者: xiaoxiao147    时间: 2015-11-11 22:29
来学习的,楼上很详细
作者: 申请补助没成功    时间: 2015-11-11 23:25
好问题,学习了
作者: 大自然的搬运工    时间: 2015-11-11 23:31
至少有一点。。,为了兼容以前编写的含有String的程序就不能去掉。。。
作者: 迷茫不堪的年纪    时间: 2015-11-12 00:17
final 是最终的意思. 被String 修饰的是不能改变de, 可以 API 里查一下的 .
作者: 大头爱傻瓜    时间: 2015-11-12 00:44
来学习的,长知识了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2