【浅析String类中“=,=”和equals的应用】object类的equals方法_第1页
【浅析String类中“=,=”和equals的应用】object类的equals方法_第2页
【浅析String类中“=,=”和equals的应用】object类的equals方法_第3页
【浅析String类中“=,=”和equals的应用】object类的equals方法_第4页
【浅析String类中“=,=”和equals的应用】object类的equals方法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【浅析String类中“=,=”和equals的应用】object类的equals方法 摘 要String是编程中常用到的数据类型,Java中的String类是一种引用数据类型。它将从String类对象的两种创建方式入手,分析字符串作比较时 “= =”和equals()的具体应用。 关键词equal 字符串 数据类型 TP311.1A1007-9416(xx)02-0110-02 The Analysis of String class = = and the application of equals Chen Yi Tong Yala (School of Science, Hubei University of Technology; Wuhan 430068) AbstractString is a monly used in programming data types ,Java the String is a reference data type. the paper from the String class object to create the two methods are analyze when pared to the string = = and equals () the specific application. Key wordsequal;string,data types Java是一门强类型语言,每个变量都必须声明类型。Java语言的数据类型有两大类:一类是简单类型,也称主要类型,另一类是引用类或扩展类(主要是指String类型)。简单类型的变量中存储的是具体的值,而引用类型的变量中存储的是对象的引用。在Java中,通过两种方式可以比较两个数据是否相等:(1)使用操作符“=”;(2)使用equals方法。 1 简单类型的比较 在Java中,简单数据类型的比较一般是用操作符“=”来进行的。因为原子类型(int,char等)不是对象,因此只能使用“=”操作符进行比较。只要表达式两边的“值”相等,那么比较的结果就是true,否则为false。对于对象的比较更复杂些,“= =”操作符比较两个引用是否指向同一个对象,equals方法则实现更专门的相等性比较。 2 扩展类型的比较 Java中没有内置字符串类型,在标准Java库中包含一个名为String的预定义类。 将字符串作为预定义的对象处理允许Java提供极丰富的功能特性以方便处理字符串。 对于String类型的比较可以采用“=”,也可以采用equals()方法进行比较。如: String s1=new String(“hello”); String s2=new String(“hello”); 对于s1和s2,用 “=”的比较结果将返回false,而用equals()比较的结果将返回true。这是因为“= =”在比较引用数据类型的时候,比较的是对象本身,即只有两个变量代表同一个对象的时候,才能返回true。即在比较的时候,比较了对象的地址信息,只有地址相同的对象才能够返回true。所以上面代码用“=”比较结果为false。而String中的equals()方法实现对String 对象所代表的内容的比较,它们的内容是一样的,都是“hello”,所以比较结果为true。 2.1 字符串”=”的比较 String是java中最常用的一个不可变对象。其对象的创建有两种方式: 其一:String str=“abc”; 其二:String str=new String(“abc”); 下面具体的分析,由这两种方式所创建的对象用“=”来作比较的结果。 、两者都为第一种方式创建对象的比较 String strl=“abc”; String str2=“abc”; System.Out.println(str1= =str2); 若用String strl=“abc”;语句创建一个对象,在Java内部将包含了这样一些信息: 首先,定义一个名字为strl的String类的对象引用变量。接着,在栈内存中搜索是否存在着这样一个存储单元,用来存放“abc”的值。若没有,则将新开辟一个的存储单元存放“abc”的值。然后,创建一个新的String类的对象o。并将对象o指向新开辟的存储单元,同时在栈内存中标记这个引用的对象o。若已经存在值为“abc”的地址,则搜索对象o,返回该对象o的地址。最后,将strl指向对象o的地址。strl指向存在栈中数据的引用。 String str2=“abc”;在栈内存中创建了一个对象引用变量str2,之前栈内存中已有一个对象o值为“abc”,所以str2直接指向对象o。因此JVM创建了两个对象引用变量strl和str2,但仅创建了一个对象o。并且两个引用都指向了对象o。所以比较结果为true。 、两者都为第二种方式创建对象的比较 String strl=new String(“abc”); String str2=new String(“abc”); System.out.println(strl= =str2); 系统先在栈内存中分别创建了两个对象引用变量strl和str2,接着用new关键字在堆内存中创建了两个对象,因为new运算符在每一次运算时,都会产生一个新的对象,每一个新的对象都有自己的内存和地址。所以两个引用变量分别表示了两个不同的对象。因此比较结果为false。 、由两种方式各自创建对象的比较 String strl=“abc”; String str2= new String(“abc”); System.out.println(strl= =str2); 根据前面的分析,我们可以看出这个比较的结果为false。系统在栈内存中创建了两个对象引用变量strl、str2。其中strl指向栈中的一个对象,str2指向堆中的一个对象,即两个引用分别指向不同的两个对象。所以比较结果为false。 2.2 字符串值的比较 要比较字符串的值是否相等,可以调用equals()方法。equals()方法是java.lang.Object类中的方法,在String类中它重写了这一方法,比较时,只要字符串中的每一个字符对应相等。不管对象的地址是否相同、对象是否是同一个对象,字符串对象都相等。如:strl.equals(str2)只要strl和str2的字符串的信息相同结果就为true。在重写equals方法时,要注意满足离散数学上的自反性;对称性;传递性;一致性;非空性等特性。在String类中,还有一个函数也可以用于字符串的比较:equalsIgnoreCase()。它的比较规则是只要字符串对象的对应字符是相等的。那么对象就是相等的,并且忽略字母的大、小写。 此外,还有三个类:包装类(Boolean、Character、Integer、Long、Float和Double),File和Date。它们都重写了Object类中的equals()方法,这三种类型的对象比较时,类型相同且内容一致返回值为true。 另外,若声明的是字符串数组类型变量,如: String str4=“a”,“b”,“c”; String str5=“a”,“b”,“c”; 使用“= =” 和equals比较str4和str5的关系得到的返回值均为false。即不能用“= =”和String类的成员方法equals来比较两个字符串数组的关系。要想比较字符串数组内容可以用java.util包中Arrays类的静态成员equals方法。即System.out.println(Arrays.equals(str4,str5);打印结果为true。 3 结语 在对字符串作相等判断时,“=”判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候两者结果都是相同的。因为String对象是不变模式的,如果没有明确地new一个String对象,Java对于String对象的保存默认的是会把新生成的String 对象放到一个缓冲区,每次判断缓冲区中是否已存在这个对象,如果存在,那么后创建的相同字符串值的String对象也会指向最初创建字符串值对象的地址。也就是说字符串值相同的时候,大多数情况下地址也是相同的,这时“= =”与equal()结果是相同的。若对象是由String str = new String(“abc”)生成的而不是直接用String str = “abc”赋值生成的,或者经过了一些字符串连接处理,或者通过StringBuffer等对象生成的,都将会在内存中开辟新的地址,这时“= =”和 equal()结果就不会相同了。 总之,“=” 是用来判断两个对象的地址是否相同,即是否是指相同一个对象,比较的是真正意义上的指针操作。另外“= =”两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过,“=”比较的是地址。而String的equals()方法是比较的是两个String对象的内容是否一样,其参数是一个String对象时才有可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论