Java中String类的比较运算

来源 :网络与信息 | 被引量 : 0次 | 上传用户:jiexp
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:字符串是编程中经常用到的数据类型,Java中String类是一种复合数据类型。String类对象的创建有两种形式。String类的是否相等的比较也有“==”和equals()两种。本文从栈与堆的工作原理着手分析String类对象的相等比较。
  关键词:栈;堆;字符串
  
  String是一个系统定义的类——不是基本数据类型。有关字符串处理的方法非常之多.但字符串的比较操作有些复杂,有时两个“一样”的字符串在做相等的比较运算时会得到ture的结果,可是有时得到的结果是false,这究竟是为什么呢?
  要彻底弄清两个字符串的相等比较,还得从系统的内存分配着手。
  
  1、栈与堆的区别
  
  栈(stack)与堆(heap)都是Java在RAM中的数据的存储区。Java自动管理栈和堆。程序员不能直接设置栈或堆。
  1.1栈
  栈的存取速度仅次于直接位于CPU中的寄存器,比堆的存取速度快。栈中数据项的插入和删除只能在称为栈顶的一端完成,栈的操作特性后进先出。栈中存放一些基本类型的变量和对象句柄。栈中的数据可以共享。缺点:存放在栈中的数据大小与生存期必须是确定的,缺乏灵活性。比如有如下定义:
  int a=3;
  int b=3;
  编译器先处理int a=3,首先它会在栈中创建一个整型变量为a的引用,然后在栈中查找有没有值为3的存储单元,如果没有就开辟一个存放值为3的存储单元,然后将a指向这个值为3的地址。接着处理int b=3,在创建完变量b的引用后,由于在栈中已经有值为3的存储单元,b直接指向这个值为3的地址。这样就出现了a与b同时指向3的情况。
  假设再有a=4,在编译器内部它会重新搜索栈中是否有值为4的存储单元,如果没有,重新开辟地址存放4的存储单元;如果有则直接将a指向这个地址。因此a值的改变不会影响到b的值。
  1.2堆
  堆是一个运行时数据区,类的对象从中分配空间。通过如new等指令建立。堆的优点是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动回收不再使用的数据。但缺点是。由于要在运行时动态分配内存,存取速度较慢。
  
  2、字符串“==”的比较
  
  String是一个特殊的包装类数据。当测试两个包装类的引用是否指向同一个对象时,用“==”
  String类的对象有两种形式创建:
  形式一:String str=“abc”:
  形式二:String str=new String(“abc”):
  2.1两者都为第一种形式创建的对象的比较
  String str1=“abc”:
  String str2=“abc”:
  System.out.println(strl==str2):
  用语句String str1=“abc”;创建对象Ja-va内部将此语句转化为以下几个步骤:
  (1)先定义一个名为str1的对String类的对象引用变量。
  (2)在栈中查找有没有存放值为“abc”的存储单元,如果没有,则开辟一个存放“abc”的存储单元,接着创建一个新的String类的对象o,并将对象o指向这个存储单元,而且在栈中记下这个引用的对象o。如果已经有了值为“abc”的地址,则查找对象o,并返回对象。的地址。
  (3)将strl指向对象o的地址。str1指向存在栈中数据的引用。
  String str2=“abc”;在栈中创建了一个对象引用str2,因为栈中已有一个对象o其值为“abc”,str2指向对象o,因此JVM创建了两个引用str1和str2,但只创建了一个对象,而且两个引用都指向了这个对象。所以这里str1==str2。
  2.2同为第二种形式创建的两个对象的比较
  如:String str1:Dew String(“abc”):
  String str2=new String(“abc”):
  System.out.println(str1==str2):
  系统在栈内存中分别创建了两个对象引用变量str1和str2,同时在堆内存中创建了两个对象。两个引用变量分别表示两个不同的对象。如图所示,无论堆内存中是否有相同的数据存在,也不会像栈中的数据共享。因此str1!=str2。
  2.3两种不同形式创建对象的比较
  String str1=new String(“abc”):
  String str2=“abc”;
  System.out.println(str1==str2)://false
  Str1、str2是在栈创建的两个引用。Str1指向了堆中的一个对象,而str2则指向了栈中的一个对象,即两个引用分别指向不同的两个对象。所以str1!=str2。
  3、字符串值的比较
  如果要比较两个字符串的值就用equaJs()方法。如:str1.equals(str2)只要str1和str2的字面值相等结果就为true。
  4、结论
  (1)String str=“abc”;指向String类的引用被创建了。至于这个引用是否指向了一个新的对象,必须根据上下文来考虑。
  (2)String str=new String(“abc”);在栈中创建了一个对象引用str,str指向在堆中创建的新对象。该新对象的值为“abc”的String类。
  (3)当比较包装类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用“==”。
其他文献
随着网络的发展,各种文献信息资源的需求量也将日益增加。目前大家公认的文献信息资源主要包括图书、期刊、研究报告、会议文献、政府出版物、标准文献、专利文献、产品样本、技术档案、论文十大类型。本文拟从十个方面简要论述文献信息资源在社会发展中的作用。    1、在社会进步中的继承、发展与创新作用    文献信息资源是人类认识自然、改造自然的智慧结晶。文献信息资源具有继承与发展,继承与创新的发展规律。以文献
期刊
2007年5月18日下午4时许,北京京都信苑,广州珠江帝景酒店,专业无线外设厂商雷柏(RAPOO)在以上两地同时举行“舒适无线”RAPOO雷柏登陆中国品牌暨产品上市(第三代无线技术新品)发布会。  在发布会上,雷柏演示了7100、7200、7300、9100、9200等一系列全新2.4GHz无线多媒体外设产品,该系列产品具备10米超远无线连接、16信道自动对码、12个月超长电池续航能力等特点。  
期刊
去年9月,老牌看图工具推出其英文版ACDSee9.0,在经过了近半年的等待后,我们终于可以用上中文版的ACDSee9.0了。于近日发布的中文版ACDSee9.0增加了很多实用功能,比如:具有更快的查看速度,增加了“阴影/高光”工具,增加了“隐私文件夹”加密的功能,新增“日历事件”视图,新增加了“组合方式”可以让你快速整理文件……新版的ACDSee不仅仅是一个看图软件而已。集成了诸多的图片管理和安全
期刊
每到黄金周,外出旅游自然是大家的首选。然而,要做好哪些准备工作才能确保旅途的愉快呢?的确,要外出旅游有很多准备工作要做:查询所在景点的地图、熟悉所到城市的风土人情、车票酒店预订,当然,天气情况也是必须提前了解的,甚至公交线路也有必要了解,如果是自驾游,还必须关注行车路线……这么多事情,着实有些麻烦,俗话说,“一个好汉三个帮”,要做好五一旅游前的准备工作,我们也有必要请几个“好汉”来帮助我们,下面就
期刊
校园与Internet相连,可以使老师和学生得到大量的信息资源,开阔眼界和知识面,所以组建校园网成了促进学校教育现代化的必经之路。作为校园网内部网络和互联网连接枢纽的路由器,在其中发挥着举足轻重的作用。因此对于路由器的管理和维护是每个校园网管理员必不可少的主修课。  考虑到中小学校园的通用性,我们主要介绍校园网中常见的路由器Cisco 2612的维护内容,当然本文内容也可以适用于更高性能的Cisc
期刊
摘要:本文提出一种基于DWT的数据隐藏及检测算法,利用要隐藏数据控制生成图像,产生8×8的小图块,每一块只可选两种颜色之一,在检测时充分利用该特性,使检测结果准确,对噪声具有较强的鲁棒性。  关键词:水印;离散小波变换;鲁棒性  中图分类号:TP391    1、介绍    随着计算机技术的发展与应用,数字技术得到了快速发展与应用,特别是近几年网络的快速发展,越来越多的人使用Internet传输数
期刊
摘要:公钥基础设施是一个用非对称密码算法原理和技术来实现并提供安全服务的具有通用性的安全基础设施,能够为所有网络应用透明地提供采用加密和数字签名等密码服务所需要的密钥和证书管理。  关键词:PKI;证书;认证中心    1、引言    PKI是一种遵循标准的利用公钥加密技术为网上电子商务、电子政务的开展,提供一整套安全的基础平台。用户利用PKI平台提供的安全服务进行安全通信。PKI这种遵循标准的密
期刊
摘要:本文首先明确了在嵌入式系统中,需要一个比目前更可靠、高效的Flash文件系统。随后介绍了一种新的Flash文件系统,并对其存储组织结构和基于VxWorks系统时钟中断的Flash读写方法作了详细的阐述。这种Flash文件系统已成功应用于通信系统中。 关键词:VxWorks;Flash;系统时钟    1、引言    在嵌入式系统中,Flash存储区需要一个可靠、快速和节约CPU资源的管理方
期刊
摘要:本文提出了一个基于数据挖掘技术的入侵检测系统,其中主要采用了时间序列模式挖掘方法——TFSE算法挖掘入侵模式。该系统实现了规则库的自动更新,极大地提高了系统的整体性能。  关键词:网络安全;入侵检测系统;数据挖掘;    TFSE算法    1、引言    入侵检测被定义为发现非授权使用计算机的个体或计算机系统合法用户非法访问系统以及企图实施上述行为的个体。  入侵检测系统分为3大类:基于网
期刊
摘要:Web 2.0时代下,基于C/S的系统模型将受到挑战-作为网络结构的边缘点的Client将与Server越来越对等化,基于P2P的网络将大大提升网能放大作用,但是其无序性特征却给电信骨干网带来较大冲击。新兴的内容分发网络(CDN,Content DeliveryNetwork)虽然具有较强的结构化特点,但是其放大能力受扩展成本的限制。本文针对这两种结构互异网络的优劣势,在CDN网络基础上,融
期刊