admin 管理员组文章数量: 887021
2023年12月16日发(作者:fetchingaddmachine)
Java语言中字符串常量和变量的分析与比较 郑 霞,郭 磊 (安阳师范学院计算机与信息工程学院,河南安阳455000) [摘要]字符串是所有编程语言中都经常需要处理的问题之一。通过对Java语言中两类字符串,即字符串常量 Stirng和字符串变量StringBuffer的分析和比较,分析了它们的特点和区别,便于程序员在以后的编程中更有效地使用它 们。 [关键词]String;StringBuffer;常量;变量 【中图分类号]TP312JA [文献标识码]A [文章编号】1671—5330(2012)02—0046一O3 O 引言 虽然通过以上两种方式都可以创建String对 字符串是由零个或多个字符组成的有限序 象,但是二者在创建对象时采用的内存分配方式 列。一般记为s=“a a …a ”(n>=0)。它是编 是不同的。如果是按照以下调用构造方法的形式 程语言中表示文本的数据类型,代表具有一定意 来创建Stirng对象:String sl:new Stirng 义的信息,现实世界的大部分信息都以字符串的 (“abc”);Stirng s2=new String(“abe”);sl和s2 形式表示。对于一种编程语言来说,字符串处理 的内存分配如图1所示。sl和s2分别占有独立 是许多需要进行的重要任务之一,如用户程序输 的内存空间,利用“==”相比较的话,则sl== 入信息、程序向用户显示信息等。所以几乎每一 s2的结果为false。但是由于在程序中经常出现 种编程语言都要有专门针对字符串的表示和操 大量String对象的值相同的情况,造成内存空间 作。Java语言是纯粹的面向对象的语言,所以它 的冗余。为了有效地利用内存,Java中预留了一 的字符串是用对象表示的,Java语言的字符串分 块特殊的内存区域,称为String常量池。当编译 为字符串常量(用String类的对象表示)和字符串 器遇到一个String常量时,先检查常量池中是否 变量(用StringBuffer类的对象表示),它们都位于 存在值相同的String常量,如果存在,则把该常量 java.1ang包中,他们除了能够表示字符串外,还定 的引用指向常量池中的String常量。下面是利用 义了很多专门进行字符串的处理方法。本文主要 直接赋值的方式创建字符串的内存分配方式,如 讨论定义两类字符串的特点和区别。 图2所示: l字符串常量String类 1.1字符串常量的创建 和创建其它的任一种对象的方式相同,创建 String对象也需要调用它的构造方法来完成,如: 图1字符串常量创建举例 String s=new Stirng(“abc”);也可用另一种直接 String对象被称为字符串常量,这表明一旦 赋值的方式来创建String对象,如:String S= 为Stirng对象赋值,它的值就会保持不变。但是 “abc”: String引用变量的值却可以改变。如String S= [收稿日期]2012—02一O1 [作者简介】郑霞(1978一),女,讲师,主要从事统计自然语言处理。
第2 jf』】 郑霞,郭瓤:JaⅦ语青III宁符中常量和变量的分忻与比较 47 图4所示: I. .. .. 乍【... . . . 图2字符串常量池举例 “abc”;s=“abcdef”;首先定义S的初值为“abc”, 图4字符串变量举例 然后将S赋值为“abcdef”,以上语句的内存分配 除此之外,StringBuffer类中还包含很多修改 如图3所示: 字符串内容的方法,除了append()方法外,还有 如insert()、setCharAt()、deleteCharAt()等,都是 在原有StringBuffer对象内容的基础上进行修改, 而作为字符串常量的String类而言,没有这些直 图3字符串常量举例 接修改内容的方法。而对于StringBuffer对象,除 1.2 String类的常用方法 了以上对字符串内容进行修改的方法外,还包括 String类的常用方法有 Stirng类中的查找方法如indexOf()和lastlndexOf 字符串的比较方法:如equals(),equalslgno— ()方法,截取子串的substring()方法等。Stirng— reCase(),compareTo等。 Buffer是一个具有对象引用传递特点的字符串对 字符串的查找方法:indexOf(),lastIndexOf 象。StringBuffer对象可以调用其方法动态地进行 等; 增加、插入、修改和删除操作,且不用像数组那样 字符串的连接方法:concat(); 事先指定大小,从而实现多次插入字符,一次整体 但是不管什么样的方法,String对象本身的 取出的效果,因而操作字符串非常灵活方便。一 内容并没有改变。如String S=“hello”, 旦通过StringBuffer生成最终想要的字符串,就可 System.out.println(S.concat(“world”));则 调用它的toString方法将其转换为一个Stirng对 输出hello world,然后再利用System.out.prinfln 象。 (s)输出S的值则仍为hello。 3 String和StringBuffer对象实例 2 StringBuffer类 下面给出一个关于String和StringBuffer对象 的例子。首先分别产生一个Strit ̄g对象textSring String类提供了许多对字符串进行处理的方 和StringBuffer对象textBuffer,初始值都为“Ja— 法,它适用于字符串内容保持不变的情况,如果程 va”,然后对textSring执行replace(‘j’,’i’)方 序中字符串的内容不会改变,则使用Stirng对象 法,对textBuffer执行append(“c”)方法,输出的 表示字符串,以提高程序的执行效率。当然也可 结果是textString保持原来的值不变还是“Java”, 以修改Stirng对象的内容,但是每次对字符串内 而textBuffer的值变成了“JavaC”。原因是字符串 容的修改都要创建一个新的Stirng对象,原来的 常量String对象的值永远保持不变,除非给它重 String对象就会被废弃掉,因此会在String常量池 新赋值,使它指向一个新的对象。而字符串变量 中产生大量的被废弃掉的Stirng对象,会大大影 StringBuffer的值是可以改变的,而且是在原来内 响程序的执行性能。 存的基础上改变的。运行结果如图5所示。 StringBuffer类则专门设计了对字符串内容进 行修改的操作,改变后的字符串则仍然存放在原 来的内存单元中,而且StringBuffer对象的容量还 会随着字符串长度的增加而动态增加,与String 对象相比,如果字符串内容改变了,采用String— Buffer对象比Stirng对象会节省大量的内存空间。 如创建StringBuffer对象: StringBuffer S=new StringBuffer(“abc”);可 图5实侧 以通过append()方法增加StringBuffer对象的字 public class StringAndStringbuffer 符串内容,S.append(“de”);相应的内存分配如
48 安Ⅲ帅范学院学报 static void stringReplace(Su‘ing text) String); { System.out.println(”textBuffer=”+text— text=text.replace(j i’; Buffer); } } static void bufferReplace(StringBuffer text) } { 4结论 text=text.append(”C”); 为了提高程序执行的效率,在Java中提供了 } 字符串常量Stirng和字符串变量StringBuffer来表 public static void main(Stirng args¨) 示字符串。其中字符串常量Stirng的值一经给定 i 就不会再改变,如果要进行查找、比较等操作的 String textString new String(”java”); 话,最好使用String类;但是如果要频繁改变字符 StringBuffer textBuffer=new StringBuffer(”ja— 串的值的话,则使用StringBuffer效率较高。 va”); stringReplaee(textString); [参考文献] bufferReplace(textBuffer); [1]赵卓君.Java程序设计——基础教程[M].北京:清 System.out.println(”textString ”+text— 华大学出版社。2010. The Analysis and Comparison of Java String Constant and Variable ZHENG Xia.GU0 Lei (Anyang Normal University,School of Computer and Information Engineering,Anyang 56600,China) Abstract:Stirng processing is one of important aspects in programming languages.First,this paper叽alyses nad compares stirng constant and variable of Java Language,and then prefers the character and the difference between them.It’S useful for programmer to use them correctly. Key words:Stirng;Stirng Buffer;Constant;Variable [责任编辑:D]
版权声明:本文标题:Java语言中字符串常量和变量的分析与比较 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702709021h427622.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论