A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有谁可以详细地解释一下。
String 是个final的类。之后又有了StringBuffer 和StringBuilder   ,为什么不把String去掉,直接只要后两者呢,是什么原因让java这么做呢?

13 个回复

倒序浏览
我是个菜鸟
回复 使用道具 举报
= =看看百度能不能找到答案,坐等大神解答
回复 使用道具 举报
66666666666666666
回复 使用道具 举报
很多方面吧,举一个方面就是效率吧,后两者的运行效率比前者要低很多。
回复 使用道具 举报
线程安全,效率高。
回复 使用道具 举报
为什么不去掉我不知道。
我只知道Java   从来没有去掉过任何类, 就算是过时 也不作废。
回复 使用道具 举报
陈琪 中级黑马 2015-11-11 22:13:25
8#
不变类的意思就是不会发生变化的类,就是当类的实例被创建后,状态不会发生变化的类。
不变类有什么好处呢?
1、不变类是线程安全的,由于不变类的状态在创建以后不再发生变化,所以它可以在线程之间共享,而不需要同步。
2、不变类的instance可以被reuse
创建类的实例需要耗费CPU的时间,当这个实例不再被引用时,将会被垃圾回收掉,这时候,又需要耗费CPU的时间。对于不变类而言,一个好处就是可以将常用的实例进行缓存,从而减少了对象的创建。
回复 使用道具 举报
陈琪 中级黑马 2015-11-11 22:15:24
9#
String是一个不变类,仍然有replace,replaceAll这样的方法,而String仍然是一个不变类,那是因为在这些改变状态的方法中,每次都是新创建一个String对象。大家如果理解了不变类,那也就不难理解为什么在做String的concatenate时,应当用StringBuffer而不是用+的操作符。因为String是一个不变类,那么在做连接操作时,就会创建临时对象来保存中间的运算结果,而StringBuffer是一个mutable class,这样就不需要创建临时的对象来保存结果,从而提高了性能。
回复 使用道具 举报
来学习的,楼上很详细
回复 使用道具 举报
好问题,学习了
回复 使用道具 举报
至少有一点。。,为了兼容以前编写的含有String的程序就不能去掉。。。
回复 使用道具 举报
final 是最终的意思. 被String 修饰的是不能改变de, 可以 API 里查一下的 .
回复 使用道具 举报
来学习的,长知识了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马