黑马程序员技术交流社区
标题:
滴滴面试被问到:为什么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