java String 源码
String 类底层是 char 类型数组实现的。
String 类API 文档描述如下:
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例来实现。
字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们。例如:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
讨论 String的值为什么不可变:
String类被定义为 final ,且jdk的API中没有提供可以更改char[]值的方法。
至于substring 、replace 方法等均是重新生成一个新的String对象,而并不改变原先对象。
java语言 String中有字符串常量池的概念:
String s1 = "hello";
String s2 = "hello";
String类有一个特殊的创建方法,就是使用""双引号来创建
上述的代码创建String 实例步骤
1.查看常量池中是否存在内容为 hello 的相同字符串对象
2.若没有,就在常量池中创建一个包含该内容的字符串对象,并让引用变量指向该对象
3若已经存在,则让字符串引用直接指向常量池中对象
上例中 s1==s2 为true;
String s3 = new String("hello world");
String s4 = "hello world";
String s3 = new String("hello world")
实际创建了2个String对象,一个是"hello world"通过""双引号创建的,另一个是通过new创建的.只不过他们创建的时期不同,一个是编译期,一个是运行期!
这时 s3 == s4 为false;两个不同的对象。
再看 String 类定义:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
{
/** The value is used for character storage. */
//底层维护的是char 数组。
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count;
/** Cache the hash code for the string */
private int hash; // Default to 0
String 重写了equals方法:
public boolean equals(Object anObject) {
//比较地址
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
//比较两字符串char[]数组里的值。一一对应比较。
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
分享到:
相关推荐
java String 使用详解,看完对String 的用法完全掌握
java String 与各种进制字符之间的转换
Java String与Byte类型转换;用到网络编程.
java String 编写的数据结构,一些基本的函数应用,适合初学者
5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5....
Java String对象的经典问题,有关String类的介绍
在JDK1.5中,String类增加了一个非常有用的静态函数format(String format, Objece... argues),可以将各类数据格式化为字符串并输出。其中format参数指定了输出的格式,是最复杂也是最难掌握的一点,而argues则是一...
Java中经常用到的String类方法。这些都是比较常用的。欢迎下载!
日期转换例子,支持含各种语言的三个字母缩写...适用于数据导入数据库String类型中含英文缩写转换,网上普遍使用的String to Date 都不适用含Mon Jul 等缩写,对比API,可以实现任意格式的String 类型转换成Date类型
本文主要介绍了java String类常用方法的例子,具有很好的参考价值,下面跟着小编一起来看下吧
Java技术:Java String常见问题解析
String类 字符数组 代码及注释 个人笔记 适合初学者
Java中十大常见Java String问题_动力节点Java学院整理
内含简单的java String 类方法,简单的继承 接口以及Scanner类的使用实例
Java--Java String和StringBuilder。
java string用法详解
java编程中对字符串的各种方式的处理,包括(空字符串处理、判断是否是空字符串 null和"" 都返回 true、 把string array or list用给定的符号symbol连接成一个字符串、 判定第一个字符串是否等于的第二个字符串中的某...
JAVA String.format 方法使用介绍
javastring.pdf