String与StringBuffer简解
2015-07-23 12:46
232 查看
String
String的一个关键概念是一个String对象想创建后,就永远不能改变它。在java内String就是对象,像这样 String s=new String();赋值s="aaa";
就可以创建一个心得String对象实例.一旦为String赋值那该值将永不改变.虽然该值不可变。但其引用变量却不是这样.
如果你对String对象赋值了后想改变其值。像这样s=s.concat("abcs")。java并不会在String 对象上修改添加abcs 而是创建了一个新的对象然后把
新的对象交给String s .严格上来说java其实创建了三个对象:初始对象aaa和连接对象常量参数abcs 还有产生的新对象aaaabcs。当我们调用了s.concat后之前的String "aaa"
仍保留在内存中,但它被看做丢失状态。任何代码都没有方法访问它。
(hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 [1] public int hashCode()返回该对象的哈希码值。)
输出:
String
3237136
1948334481
从上面的例子可以看出在String 尾部追加了新字符串后String s的引用对象也随之发生了变化.可以说明Sring 在赋值后对其修改是产生一个新的String对象,再使String s引用吗,而不是直接修改。
StringBuffer和StringBuilder
类似于 String 的字符串缓冲区对字符串进行大量修改,java.lang.StringBuffer和java.lang.StringBuilder是最好的选择。因为它不会像String那样造成大量丢弃的String对象.下面一段代码就能区别String和Stringbuffer的区别。SUN的建议是在可能的情况下优先采用StringBuilder,因为在大多数实现中,它比StringBuffer 要快。
输出:
String
3237136
1948334481
StringBuffer
1826043875
1826043875
从上面可以看出StringBuffer和StringBulider不会像String 赋值修改后会生成新的对象,而是对原始对象直接修改.
StringBulider和StringBuffer的主要区别:
StringBuilder和StringBuffer有着完全一样的api只不过Stringbulider不是线程安全的也就是说它不是线程同步的
String的一个关键概念是一个String对象想创建后,就永远不能改变它。在java内String就是对象,像这样 String s=new String();赋值s="aaa";
就可以创建一个心得String对象实例.一旦为String赋值那该值将永不改变.虽然该值不可变。但其引用变量却不是这样.
如果你对String对象赋值了后想改变其值。像这样s=s.concat("abcs")。java并不会在String 对象上修改添加abcs 而是创建了一个新的对象然后把
新的对象交给String s .严格上来说java其实创建了三个对象:初始对象aaa和连接对象常量参数abcs 还有产生的新对象aaaabcs。当我们调用了s.concat后之前的String "aaa"
仍保留在内存中,但它被看做丢失状态。任何代码都没有方法访问它。
(hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 [1] public int hashCode()返回该对象的哈希码值。)
public class testString { public static void main(String agrs[]) { System.out.println("String"); String s=new String("init"); System.out.println(s.hashCode()); // 连接新字符串 s=s.concat("add"); System.out.println(s.hashCode()); System.out.println(); } }
输出:
String
3237136
1948334481
从上面的例子可以看出在String 尾部追加了新字符串后String s的引用对象也随之发生了变化.可以说明Sring 在赋值后对其修改是产生一个新的String对象,再使String s引用吗,而不是直接修改。
StringBuffer和StringBuilder
类似于 String 的字符串缓冲区对字符串进行大量修改,java.lang.StringBuffer和java.lang.StringBuilder是最好的选择。因为它不会像String那样造成大量丢弃的String对象.下面一段代码就能区别String和Stringbuffer的区别。SUN的建议是在可能的情况下优先采用StringBuilder,因为在大多数实现中,它比StringBuffer 要快。
public class testString { public static void main(String agrs[]) { System.out.println("String"); String s=new String("init"); System.out.println(s.hashCode()); // 连接新字符串 s=s.concat("add"); System.out.println(s.hashCode()); System.out.println(); System.out.println("StringBuffer"); StringBuffer stf=new StringBuffer("init"); System.out.println(stf.hashCode()); // 连接新字符串 stf.append("add"); System.out.println(stf.hashCode()); } }
输出:
String
3237136
1948334481
StringBuffer
1826043875
1826043875
从上面可以看出StringBuffer和StringBulider不会像String 赋值修改后会生成新的对象,而是对原始对象直接修改.
StringBulider和StringBuffer的主要区别:
StringBuilder和StringBuffer有着完全一样的api只不过Stringbulider不是线程安全的也就是说它不是线程同步的
相关文章推荐
- HTML5引擎Construct2技术剖析(七)
- Count Complete Tree Nodes
- HTML5引擎Construct2技术剖析(六)
- JS Math 对象的方法
- Delete Node in a Linked List
- 第八届河南省ACM省赛 - G - Interference Signal
- jsp
- HTML5引擎Construct2技术剖析(五)
- 处理Json数据中的日期类型.如/Date(1415169703000)/格式
- C# DataTable 转换成JSON数据
- caffe 安装资料整理
- LeetCode #19 Remove Nth Node From End of List
- css3开发酷炫滑动导航
- jQuery Pagination Plugin
- JavaScript encodeURIComponent() 函数
- jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码
- HTML5引擎Construct2技术剖析(四)
- Jsoup 解析 HTML
- 7-23 jsp页面转为html页面
- 201507231141_《JavaScript——位掩码技术》