好像没有什么区别
如果发送很多字符的话StringBuffer效率高一些。说得不知道对不对:)
如果发送很多字符的话StringBuffer效率高一些。说得不知道对不对:)
解决方案 »
- 还是关于list的问题,大家研究下!
- java 版本测定
- 当收到输入窗口的"确定"按钮才更新数据库,"放弃"则不更新,请问调用该输入窗体的函数怎么获得输入窗口的选择结果?
- 各位大虾,学习网络编程,又没必要先学习一下ccnp?
- 怎么总出现"the document has no page!"!!!!!!
- 关于三元运算符的疑问!求指点
- 讨论个不起眼的问题
- 刚学习JAVA,这段简单程序为什么不能通过?
- 小弟有个关于java构造器的问题,帮忙看看。
- 牛人请进,菜鸟也欢迎捧棒场! 在javasoft 的forum上的两题:1.JMF and Proxy ,2.Voice Over DSL .
- 请问这个程序怎么修改呀?
- java 如何使用编写好的Oracle pl/sql程序
你要想改变string的长度,只能通过重新复制,相当于把string指向了新的地址空间。而stringbuffer 都是在同一地址空间操作。
看如下例子,体会这一点:
String s1="Hello";
String s2="Hello";
if(s1==s2)
System.out.println("Equal");
else
System.out.println("Not equla");
这个程序片断将输出Equal,原因是String类的实例是不能更改的.在生成第2个实例时它发现在缓冲池中已经有了"Hello"字符串,于是它就直接索引到这个字符串.
然而如果,你将第二行代码改为:
String s2 = new String("Hello");
再运行结果将是Not equal,因为更换了一个构造器形式,在生成第二个实例时,它就不在缓冲池中索引了,而是直接在内存中构造这样一个对象.因此,其句柄的值是不同的.
也就是说,当你更改了String类的实例,那么其句柄索引的将是在Heap Memory的另外一个位置的对象,以前的就不能再索引到了.
但是,StringBuffer类却不是如此,如果你更改了它的实例,但是在Heap Memory的缓冲池中,索引的是同一个实例.即更改了实例,但句柄的只是不变的,它是可以更改的!
String类是基本的字符串类,只能用来处理简单的字符串
StringBuffer类可以动态的进行扩展好像在处理上,对于String类,一旦创建了实例,系统就分配内存空间
StringBuffer类可以不分配内存空间,在程序执行的时候再根据需要分配