String类

1.String类

【代码4.9】比较两个字符串的内容是否相同

【代码4.10】分别用String类的equals()方法和“==”来比较字符串

代码4.10的运行结果如下:

语法说明:

(1)字符串常量必须写在双引号中,双引号中的字符个数是不限制的,而字符常量必须写在单引号中,单引号中的字符个数只能是1个。

(2)String类型的变量定义方法一如下:

内存分配见图1.4.6。

图1.4.6 String类对象的内存分配1

写在双引号中的常量字符串存放在内存常量池中,同一个字符串只存储一个拷贝,不会重复存储。s1和s2存放的是同一个“hello”的首地址,s1==s2为真,“==”比较的是字符串的首地址;s1.equal(s2)为真,equals()方法比较的是两个字符串的内容,equals()方法是在String类中定义的。

(3)String类型的变量定义方法二如下:

内存分配见图1.4.7。

图1.4.7 String类对象的内存分配2

每次用new创建一个新对象实际上是开辟一个新的内存空间,字符串对象名指代的是字符串对象的首地址。s3==s4为假,因为s3和s4中存放的首地址是不同的;s3.equals(s4)为真,因为s3和s4中存放的字符串内容是相同的。

(4)字符串的名字(如s1、s2、s3、s4)本质上指代的是字符串的首地址,“==”比较的是字符串的首地址,equals()方法比较的是字符串的内容。

(5)String类的对象一旦被重新赋值,就是一个新的字符串对象,原来的字符串对象将作为“垃圾”被系统回收,见图1.4.8。如果字符串对象经常改变的话,用String类就不是很恰当,因为每个字符串对象都是重新创建的一个新的对象,这样会多次产生“垃圾”,影响程序性能。当字符串经常改变时,用StringBuffer类或者StringBuilder类比较合适。

例如,对于如下两行语句,内存分配变化见图1.4.8。

图1.4.8 String类对象的内存分配3

【代码4.11】求一个字符串在另一个字符串中出现的次数

表1.4.2列出String类的常用方法(如表1.4.2所示),请自行在编程中学习。

表1.4.2 String类的常用方法和描述

续表