JAVA入门
来源:互联网 发布:保险公司业务数据分析 编辑:程序博客网 时间:2024/05/29 11:20
String,StringBuffer,StringBuilder都是用于字符串处理
String
看一下String类的声明
public final class String implements java.io.Serializable, Comparable<String>, CharSequence
通过声明可以看到
- String类是final的,所以String是不可变的。对字符串的任何操作,其实都是创建一个新的字符串,而不是在原字符串基础上的操作。
- String类实现了Serializable接口,所以String是可序列化的。
- String类实现了Comparable接口,所以String是可排序的
String在JAVA中是非常特别的一个类,他不是基本数据类型,但在声明String变量时,我们却可以像声明一个基本数据类型一样地去声明
String str = "abc";
这是因为String使用过于频繁,JVM针对String类做了特别设计。
JVM内存大致可以分为堆及栈,栈存储一些基本数据类型的数据以及对象的引用等,而对象则都保存的堆内存中,堆内存通常可分为JAVA堆跟方法区,方法区内存一般称为永生代,即这部分内存存储的东西基本上是不会被当垃圾回收掉的,是常驻内存。(更多关于JVM内存结构的知识,可以关注[JVM系列文章]{http://blog.csdn.net/gongm24/article/category/6738880})
一般的对象是存储在JAVA堆中,String类有很多不同的构造方法,通过
String str = new String("abc")
这种方式构造的对象也跟普通对象一样是存储在JAVA堆中,但是通过
String str = "abc"
方式生成的String对象却有点不一样,它并不存储在JAVA堆中,JVM在方法区中单独开辟了一个区域叫做运行时常量池,专门用于缓存这类对象,所以用上述方法再声明一个”abc”对象时,JVM并不会再创建一个新的对象,而是使用运行时常量池已经存在的abc对象,所以下面代码的结果就很容易解释了。
String s1 = "abc"; String s2 = "abc"; String s3 = "a"+"bc"; String s4 = new String("abc"); s1==s2; //true s2==s3; //true s1==s4; //false
但是想像一种情况,程序中要做大量的字符串拼接的工作,使用String类的话就会每拼接一次生成一个新对象,这样就会不断生成对象,而这些对象的存活周期可能都是只使用一次,这样的程序在性能上必然不高,而解决方案也很容易想到:给String一个缓冲。
StringBuffer跟StringBuilder
StringBuffer跟StringBuilder两个类都是为了解决上述情况。他们俩都继承自AbstractStringBuilder类,AbstractStringBuilder类跟String类的实现非常像,都是通过一个char[]来存储字符串,但AbstractStringBuilder类没有在char[]前加上final修饰符,AbstractStringBuilder提供了大量的方法,其中很多方法跟String类都一样,实现方式也一样。AbstractStringBuilder另外提供的最重要的方法就是append跟insert方法。
而StringBuffer跟StringBuilder作为AbstractStringBuilder的实现类,也有两者不一样的地方:
StringBuffer类中几乎所有的方法都带有synchronized修饰符,用于保证线程安全。而StringBuilder则没有,所以在不需要考虑线程安全的地方使用StringBuilder将拥有更高性能。
- java入门--activeMq入门
- Java入门
- java入门
- Java 入门
- JAVA入门
- Java入门
- Java入门
- java入门
- JAVA入门
- Java入门
- JAVA入门
- java入门
- java入门
- Java入门
- java 入门
- Java入门
- java入门
- java入门
- javascript笔记
- VxWorks任务调度
- 二叉树的最大节点
- LeetCode
- 算法导论--分治策略求解最大子数组问题
- JAVA入门
- Spark常用函数之Action操作
- 经典排序算法
- 最大子数组问题(三种方式,java实现)
- 华为手机不显示Logcat错误日志的解决办法
- Java知识点小总结(二)
- MFC控件之Button基本用法
- 模拟ATM运行(代码粗糙,敬请批评指正)
- 文档总结:OpenSSH