Java String 字符串(未完结)
作者:互联网
若发现文中有描述不当的地方欢迎评论指出,谢谢大家
String类源码分析
String类被final修饰,不可被继承,其方法则隐式被final修饰,不能被重写
实现接口
-
java.io.Serializable
java提供的这个序列化接口是空接口,无任何方法和域,该接口为对象提供标准的序列化与反序列化操作 -
CharSequence
CharSequence接口有如下方法:
1.获取字符串中指定索引的字符:public char charAt(int index);
2.获取字符串长度:public int length();
3.截取部分字符串public charSequence subSequence(int start,int end);
4.返回一个与字符序列顺序相同的字符串:toString();
实现CharSequence的类除了String还有CharBuffer、StringBuffer和StringBuilder。subSequence在String类中的实现,其实是在方法体里直接调用了我们较为熟悉的subString方法。所以subSequence和subString的结果是相同的,只不过subSequence可返回实现CharSequence接口的类的对象,调用subSequence方法可通过向下转型为实现类。关于CharSequence的详细信息本文将不再继续深入探究. -
Comparable< String>
Java中所有的comparaTo方法都源自同一个接口—Comparable.这个接口只有一个int compareTo(T o)方法,用于对两个实例化对象比较大小。按字典顺序比较两个字符串。String类的compareTo按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。关于Comparable的详细信息同样将不再深入探究。
成员属性
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -6849794470754667710L;
成员属性 | 说明 |
---|---|
private final char value[] | 可以看出String类其实时通过这个char数组保存字符串 |
private final int hash | 通过hashCode方法将一个字符串映射成一个整数 |
private static final long serialVersionUID = -6849794470754667710L; | 实现Serializable接口的目的是为类可持久化,serialVersionUID适用于java序列化机制。Java序列化的机制是通过 判断类的serialVersionUID来验证的版本一致的。 |
构造方法
构造方法有多种重载形式
常用构造方法如下:
public String() {
this.value = "".value;
}
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
第一个空参构造生成一个 “” 空字符串,第二个构造方法是将一个已存在的字符串的value和hash值复制。
Tips:
JDK1.7以及之后的版本的JVM已将常量池从方法区移除,在Heap堆中开辟了一块区域存放运行时的常量池。
自JDK1.8起,java的方法区被位于内存的元空间代替。
创建字符串常用的两种方式有何不同:
Java中的String pool存在于方法区而非堆栈,是常量池Constant pool中的一部分。变量一般存在于栈中因其是可变的。常量池指的是编译期被确定并保存在.class文件中的数据。例如int i=1; String s = “hello”;都被看做常量,JVM会将他们统一放在常量池中。
常用第一种创建字符串的方式:String str1 = new String("hello");
这种方式JVM会直接在堆中创建一个String对象,而不会主动的将对象存入String pool中维护。
常用第二种创建字符串的方式:String str2 = "hello";
这种方式JVM首先会在String pool通过equals方法查找是否存在该String对象,如果有则直接返回,而不是像方式一中那样不先查找而直接创建一个对象,通俗的说就是JVM会去String pool中寻找内容相同的字符串并返回地址。如果String pool中没有该String对象,JVM则会在堆中创建一个新的String对象,返回引用同时也会将引用加入String pool中。
还有其他方式创建字符串,如String s = str1 + str2;//s1,s2为变量
JVM会在堆上直接创建str1和str2,即便s1和s2指向的对象在池中已经存在,也会将值拷贝到对象创建新对象,然后创建str1+str2并赋给s。
常用方法
标签:Java,String,未完结,int,value,JVM,字符串,final 来源: https://blog.csdn.net/super__x/article/details/108903164