Java源码初窥--String
来源:互联网 发布:mac mini 更新 编辑:程序博客网 时间:2024/06/10 22:49
String类代表文字串,java程序中所有的字符常量,如"abc",都是String类的实例.String是常量,他的值只要创建之后都不会改变(此处说的不可变不是说不能改变,我们再写程序时通常会给string变量赋值,其实不是改变他的值,我们知道string是引用对象,赋值实际上是在内存string pool中添加一个新的对象然后再指向赋值的对象),string buffer 则支持可变string,因为string的不可变,所以他们可以共享:举个例子
Stringstr = "abc"; 1
char[] data = {'a','b','c'};
Stringstr = new String(data); 2
其实1和2两个对象是同等概念。
String类包括用于检查单个字符的顺序、比较字符串、搜索字符串、提取字符串、创建一个字符串全部转换为大写或者小写的拷贝等方法。
Java语言提供的字符串的特殊支持 连接运算符(+),以及将其他对象转换为String类型,字符串连接的实现是通过StringBuffer类中的一些方法实现的。String转换是通过toString方法实现的,它被定义在Object以及所有继承Object的类。
在一般情况下,传递null参数给String构造函数将导致抛出NullPointedException.
(以上信息由String源码说明翻译过来)
通过对String源码的阅读:
我们发现他共有四个私有成员变量:
1.char [] value :用于存放string值的字符数组,在进行所有操作是基本上都是对这个数组的操作。
2.int hash :这个是 string的 hash值 默认是0
3.static final long serialVersionUID : 这个是 序列号 java 序列化用到的
4.static final ObjectStreamField[] serialPersistentFields : 串行持久化字段 String是序列化流协议中的特殊情况,String实例最初写入ObjectOutputStream时是以 utf 格式写入的。
他的构造函数很多,有些也是已经过时的了,我们平时使用最多的差不多有一下一些情况:
String(),String(String original), String(char value[]),String(char value[], int offset,int count), String(byte bytes[],int offset, int length), String(byte bytes[]),String(StringBuffer buffer), String(StringBuilder builder).
方法的话,这里就介绍一个重要的方法:
1. char charAt(int index) :返回执行位置的字符
2.equals(Objectobj) : 比较两个字符串的值,它的源代码如下:
if (this == anObject) {
return true;
}
if (anObjectinstanceof String) {
String anotherString = (String)anObject;
int n =value.length;
if (n == anotherString.value.length) {
char v1[] =value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
returnfalse;
i++;
}
returntrue;
}
我们可以看出,首先,是比较对象是否是同一个,然后再比较value数组是否相等。
3. compareTo(String anotherString) :比较方法,string是实现了Comparable这个接口的,所以必须实现这个方法。
4. regionMatches(int toffset, String other,int ooffset,
intlen) :区域匹配,与另外一个字符串进行一个块的匹配,返回值类型为布尔
5.startsWith(String prefix, int toffset):判断是否已在toffset开始时是否以prefix开头。
6. endsWith(String suffix) :是否以suffix结尾
7. hashCode() : 计算hash值,是根据value来计算的的,还是老方法,31是个神奇的数字。
8. indexOf 系列:都是返回指定字符的顺序即数组下标。
9. substring(int beginIndex,int endIndex) : 截取字符串,内部实现是通过构造函数实现的,有个offset什么东东的.
10. concat(String str) : 连接字符串
11. trim() : 去掉首尾的空字符,
以上只是部分String类中的内容,更多详细信息请参照java源码java.lang.String.class。
- Java源码初窥--String
- JAVA源码解析-String源码
- java 源码 String
- 【Java源码】String类
- JAVA源码String学习
- java String源码
- JAVA源码阅读--String
- Java源码-String
- Java String 源码解析
- java String源码解析
- Java源码之String
- JAVA源码---String
- Java String源码解析
- Java String 源码浅析
- Java String 源码浅析
- Java源码解析:String
- Java String源码解析
- JAVA源码学习--String
- Linux下安装memcached
- DevExpress XtraNavBar结合WeifenLuo.WinFormsUI.Docking布局
- Android入门之Handle
- iOS开发中的SQLite知识总结
- 1200人民币,黑莓发布新机“雅加达”
- Java源码初窥--String
- POJ 3414 Pots
- Create table as select
- Xcode开发调试技巧
- HDU 1176 免费馅饼 (简单DP)
- hdu 3535 AreYouBusy
- 23种设计模式(3):抽象工厂模式
- 转发跟重定向的区别【个人理解】
- Error in an XML file: aborting build.