Java常用类String类的详细介绍

  • 来源:网络
  • 更新日期:2020-07-14

摘要:常用类 String(推荐教程:java入门教程)String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量,它们的值在创建之后不能更改。字符

常用类 String

(推荐教程:java入门教程)

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。

字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

String源码

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}

String的成员变量

//String的属性值
private final char value[];
//数组被使用的开始位置
private final int offset;
//String中元素的个数
private final int count;
//String类型的hash值
private int hash; // Default to 0
private static final long serialVersionUID = -6849794470754667710L;
private static final ObjectStreamField[] serialPersistentFields =
  new ObjectStreamField[0];

从源码看出String底层使用一个字符数组来维护的。

成员变量可以知道String类的值是final类型的,不能被改变的,所以只要一个值改变就会生成一个新的String类型对象,存储String数据也不一定从数组的第0个元素开始的,而是从offset所指的元素开始。

(视频教程推荐:java视频教程)

创建字符串对象的方式

String s1 = "hello" ; 
String s2 = "world" ;
String s3 = "hello" ;
System. out. println(s1 == s3) ; //true

S1和S3的“hello”和s2的"world"存在的是方法区的常量池。

如图:

所以s1==s3

s1 = new String ("hel1o") ;
s2 = new String ("hel1o") ;
System.out.println(s1 == s2) ; //false
System.out.println (s1.equals (s2) ) ; // true

s1和s2是通过new得到两个String对象,存在堆中,地址是不一样的。s1和s2是两个引用,所以比较的是地址,s1 != s2。

String的equals是重写了Object的equals,不是和Object一样比较地址,而是比较值,所以s1.equals (s2) 是true。

3.char c[]= { 's', 'u' , 'n',',', 'j', 'a', 'v' ,'a'} ;
String s4 = new String(c) ;
String s5 = new String(c,4,4) ;
System.out.println(s4) ; //sun java
System.out.println(s5) ; //java