首页 > 代码库 > Java中的String类

Java中的String类

Java中定义了String和StringBuffer两个类来封装对字符串的各种操作,存放于java.lang包中,无需导入即可直接使用它们。

一、String对象的创建及初始化。

1.使用字符串常量直接初始化:

String s1 = "Hello world!";

这样的字符串严格来讲都是String类的匿名对象,对象名称s1保存在栈内存中,而字符串“Hello world!”保存在堆内存中。

技术分享

通过引用传递创建字符串对象s2:

String s2 = s1;

在第一次定义字符串的时候,在堆内存中开辟一块空间,如果之后使用直接赋值或者引用传递创建新的对象,且此内容已经存在,就不会开辟新的堆内存,而让其指向了已有的字符串内容。

技术分享

2.使用构造方法初始化:

String s3 = new String("Hello world!");

这种方法会开辟第二块堆内存空间,其中一块将会成为垃圾,无法实现自动入池操作。

技术分享

在String类中提供了手工入池的方法:public String intern();

String s3 = new String("Hello world!").intern();

3.使用串联方式:

String s4 = "Hello"+" world!";

二、String内容的比较。

1.调用equals()方法:

String s = "Hello world!";
Boolean result = s.equals("Hello world!");

这个方法在之前已经提到过了,equals()比较字符串的内容,它会区分字符串的大小写,也有一种忽略大小写的方法:public boolean equalsIgnorecase();。

2.使用比较运算符“==”:

1 String s1 = "Hello world!";
2 String s2 = "Hello world!";
3 String s3 = new String("Hello world!");
4 Boolean result1 = (s1==s2);//true
5 Boolean result2 = (s1==s3);//false

可以看出,“==”完成的是两个对象堆内存地址的判断,比较两个对象是否引用同一个实例,而不是真正意义上字符串内容的比较。

三、字符串一旦声明则不可改变。

String s = "Hello";
s = s + " world";
s = s + "!";
System.out.println(s);//Hello world!

从输出结果来看,字符串的内容被改变了,但实际上只是String类对象的引用改变了,开辟出额外的堆内存空间,造成大量字符串垃圾。

技术分享

所以,在编程过程中应尽量避免多次修改字符串内容,以免出现大量的垃圾。

四、String类的常用方法。

在Java中,String类中定义了大量的操作方法,下面列出了常用的部分方法:

技术分享

其他不再详细叙述了,仅用一个例子来大体概括它们的使用:

Java中的String类