大家都知道String类和StringBuffer类的区别,String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。因此我们得出结论:当需要进行频繁修改字符串的操作时先建立StringBuffer类对象进行操作,将最后结果转化成String类对象返回,这样效率会高很多。
但我有一个疑问,既然StringBuffer的效率比String高,sun为什么不把String类的所有方法赋予StringBuffer类,用StringBuffer类来代替String类呢?
请给我一个String类存在的理由,不要说String类可以使用+连接符操作字符串。难道sun就不能让StringBuffer类也实现这个功能?
或者让String类和StringBuffer类合而为一?
但我有一个疑问,既然StringBuffer的效率比String高,sun为什么不把String类的所有方法赋予StringBuffer类,用StringBuffer类来代替String类呢?
请给我一个String类存在的理由,不要说String类可以使用+连接符操作字符串。难道sun就不能让StringBuffer类也实现这个功能?
或者让String类和StringBuffer类合而为一?
解决方案 »
- 小白一枚,请教关于包装类中字符串类型转换成基本数据类型的问题
- 问一下关于JDK API
- 存储媒体文件
- windows 2003安装jdk和tomcat的问题
- 这个小程序那里错了?很简单的。
- 相对路径不起作用????
- 请问IE5.5 SP2的JRE版本是多少啊?为什么我的applet程序在IE5.0及IE6.0中使用IE自带的JRE可以跑起来,而在IE5.5 SP2中不行,必须安装JRE
- 怎样用Java语言写通过HTTP协议传送数据的程序啊?
- 我想用JAVA做个文本编辑器,但不知道对某些关銉字加亮是怎样设计的,请高手出招!!!
- catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
- java中进度条如何显示sql server2000数据库备份还原的进度
- 关于使用JMF的问题,请各位高手帮忙!~
StringBuffer(StringBuilder)其实可以看做“基本数据类型”String的包装类(Wrapper),
就像int与之对应的Integer等关系~(他们的关系不是完全相同,但在这点是一样的!)用StringBuffer取代String,其实就相当于Integer取代int,你认为利大于弊还是利小于弊呢!~
用:javac -c Demo你可以看到他里面用的是StringBuilderStringBuilder比StringBuffer快。没有StringBuffer安全。
StringBuilder : 可变字符串构造器,典型的对象,堆中创建,如楼主所说频繁的修改字符串如果使用String就会产生很多对象,反而降低了效率。
StringBuffer :同StringBuilder,但是是线程安全的,所以效率略低于StringBuilder。编程中很大部分是在对字符串处理,所以java就提供大量的字符串操作以适应不同的环境和需求。
StringBuffer(StringBuilder)其实可以看做“基本数据类型”String的包装类(Wrapper),
就像int与之对应的Integer等关系~(他们的关系不是完全相同,但在这点是一样的!) 用StringBuffer取代String,其实就相当于Integer取代int,你认为利大于弊还是利小于弊呢!~
如果你想定义一个字符串,但是不想它被修改,你能用stringBuffer么?????你的stringBuffer能用append()方法么????他俩只是为了解决字符串的问题。不想被修改的,用string,需要连接的用vstringBuffer.
比如。
String s1 = "a",s2 = "b";
s1 = s1 + s2;
这里s1+s2是一个新的内存对象。但是sun为什么不能象C++那样重载运算符。让s1+s2就像是s1.append(s2)呢?
为什么呢?"用StringBuffer取代String,其实就相当于Integer取代int,你认为利大于弊还是利小于弊呢!"
我正想请问提出此论点的朋友,Integer是类int不是。而StringBuffer和String都是类。它们应该不是一个类型的问题。当然也是我迷惑的地方。希望能解释的再深层次一些。
或stringb那只是人家写好的一个类我们跟着用就行了.如果觉得不太好用的话可以自己设计一个工具类来用一下.
所以关于这个问题谈深了就没意思了.