理论教育 Java面向对象程序设计-String类

Java面向对象程序设计-String类

时间:2023-11-25 理论教育 版权反馈
【摘要】:图5.1字符串的本质是字符数组当Java 编译器遇到带双引号的字符串时,即生成String 类的一个实例。表5.5将字符串转换为数值类型的方法如果指定的字符串无法转换为指定的数据类型数值,则会发生NumberFormatException异常,如下所示:字符串的本质是由字符所组成的,使用String 类声明字符串后,该字符串会具有数值索引的性质。表5.6String 类的常用方法例5.5 演示以上方法的使用。在Java 执行时会维护一个String 池。

Java面向对象程序设计-String类

字符所组成的一串文字符号被称为字符串。举个例子,如“Hello”这个字符串就是由“H、e、l、l、o”这五个字符组成的,在某些程序语言中,字符串是以字符数组的形式存在的,Java 中的字符串也一样,如图5.1 所示。

图5.1 字符串的本质是字符数组

当Java 编译器遇到带双引号的字符串时,即生成String 类的一个实例。因此,String类对象初始化的最简单方式如下:

当然,也可以按传统的方式来初始化String 类。例如:

建立String 类对象的另一种方法是使用连接操作符“+”把两个字符串连接起来,如下所示:

字符串在Java 中以String 类的一个实例存在,所以每个字符串对象本身会拥有几个可操作的方法。常用的方法见表5.4。

表5.4 String 对象的常用方法

下面演示以上的几个字符串操作方法的使用,如例5.4 所示。

例5.4:字符串常用方法的使用。

以上程序运行结果如下:

如果要将输入的字符串转换为整数、浮点数等数据类型,可以使用各类所提供的静态(static)转换方法,见表5.5。

表5.5 将字符串转换为数值类型的方法

如果指定的字符串无法转换为指定的数据类型数值,则会发生NumberFormatException异常,如下所示:

字符串的本质是由字符所组成的,使用String 类声明字符串后,该字符串会具有数值索引的性质。下面列出了几个与使用索引取得字符的相关方法,见表5.6。

表5.6 String 类的常用方法

例5.5 演示以上方法的使用。

例5.5:取得字符串字符的常用方法。(www.daowen.com)

以上程序运行结果如下:

substring(int begin,int end)中的第一个参数指向字符串的最前面之前的那个字符,第二个参数指向子串的最后一个字符之后的那个字符。

在Java 中使用字符串有一个非常重要的一个规则:一个字符串对象一旦被配置,它的内容就固定不变了。例如下面这个声明:

这个声明会配置一个长度为9、内容为“chongqing”的字符串对象,你无法改变这个字符串对象的内容。不要以为下面的语句就是改变一个字符串对象的内容:

事实上在这个程序片段中会有两个字符串对象,一个是“love”字符串对象,长度为4;一个是“lovemysec”字符串对象,长度为9,这两个是不同的字符串对象。你并不是在“love”字符串后加上“mysec”字符串,而是让str 变量引用“lovemysec”字符串对象,如图5.2 所示。

图5.2 使用“=”重新指定字符串

在Java 中,使用“=”将一个字符串对象指定给一个引用名称,其意义为改变该名称所引用的对象,原来被引用的字符串对象若没有其他名称来引用它,就会在适当的时候被Java 的“垃圾回收”(Garbage Collection)机制回收。在Java 中,程序设计人员通常不用关心没有使用的对象的资源回收问题,Java 虚拟机会检查对象是否不再被引用,没有被任何对象引用的对象将会被回收。

在Java 执行时会维护一个String 池(Pool)。对于一些可以共享的字符串对象,会现在String 池中查找是否存在相同的String 内容(字符串相同),如果有就直接返回,而不是直接创建一个新的String 对象,以减少内存的耗用。如果在程序中使用下面的方式来声明,则实际上指向同一字符串对象。

当直接在程序中使用双引号("")来包括一个字符串时,该字符串就会在String 池中,上面的程序片段中的“mytosec”就是这样的情况。“mytosec”在程序中会有一个实例,而a 与b 同时引用自“mytosec”,如图5.3 所示。

图5.3 字符串引用名称a、b 引用相同的对象

在Java 中如果“==”被使用于两个引用名称时,它是用于比较两个引用名称是否引用自同一个对象,所以当“a==b”比较时,程序执行的结果会输出“true”。

如果使用如下方式定义字符串,将不指向同一对象。例如:

每个new 语句都会新建一个String 对象,a 和b 分别引用自不同的实例,因此a==b的比较结果是false。当需要比较两个字符串对象的字符值是否相同时,要使用equals()方法。例如:

以上结果会输出true。

因为String 的“不可变”产生了很多临时变量,这也就是为什么建议使用StringBuffer 的原因了,因为StringBuffer 是可改变的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈