判断字符串相等有两种方式:一种方式是用“==”运算符来判断,主要是判断两个字符串的内存地址是否相等;一种方式是用String类的equals()方法来判断,主要是判断两个字符串的内容是否相等。
使用运算符“==”来判断
使用运算符“==”判断两个字符串是否相等时,它会判断两个字符串的内存地址是否相同,如果相同返回true,否则返回false。
案例1:创建两个字符串对象,使用“==”判断两个字符串是否相等。
在PbaseUnit11项目unit包下创建StringEqualSample1类。代码如下:
/**
*
Title:StringEqualSample1.java*
Packageunit*
Description:Java基础知识课程案例*
author编程训练营*
date*
versionV1.0*/
packageunit;
/**
*
ClassName:StringEqualSample1*
Description:字符串(判断字符串是否相等)案例2*
author编程训练营*
date*
*/
publicclassStringEqualSample1{
/**
*
Title:main*
Description:Java程序入口main方法*
paramparamargs参数*
returnvoid返回类型*
throws*/
publicstaticvoidmain(String[]args){
//创建字符串对象
StringszTempA=HelloWorld;
StringszTempB=HelloWorld;
StringszTempC=newString(HelloWorld);
StringszTempD=newString(HelloWorld);
//判断szTempA是否等于szTempB
if(szTempA==szTempB)
{
System.out.println(szTempA等于szTempB);
}
else
{
System.out.println(szTempA不等于szTempB);
}
//判断szTempC是否等于szTempD
if(szTempC==szTempD)
{
System.out.println(szTempC等于szTempD);
}
else
{
System.out.println(szTempC不等于szTempD);
}
}
}
程序结构分析
代码创建了四个字符串对象,szTempA和szTempB由字符串常量初始化,szTempC和szTempD由new运算符创建。然后分别用“==”运算符判断szTempA和szTempB、以及szTempD和szTempC是否相等。
程序执行结果如下图所示:
从执行结果可以看出,判断结果是szTempA和szTempB相等,而szTempC和szTempD不相等。这四个字符串的内容都相同,为什么会有不同的判断结果呢?
原因就是“==”运算符主要是判断两个String对象的内存地址是否相同,当用字符串常量给字符串对象赋值时,Java虚拟机会从维护的一个内存池中查找是否有内容相同的字符串对象,如果有相同的字符串对象,则返回这个字符串对象的内存地址赋值给新创建的字符串对象。所以szTempA和szTempB的内存地址是相同的,判断结果自然是相等。
szTempD和szTempC是new运算符创建的字符串对象,在Java中只有使用new运算符创建对象,Java虚拟机就会在堆(系统存储区域,用于存储应用程序创建的对象)中创建一个新的对象。所以szTempD和szTempC的内存地址不相同,判断结果自然是不相等。
由此可以看出,要判断两个字符串对象的内容是否相等,不应该使用“==”运算符,而要使用String类的equals()方法。
使用equals()方法来判断
String类的equals()方法用于判断两个字符串的内容是否相同,调用equals()方法语法如下:
str.equals(Strings);
其中str和s是要判断的两个字符串对象。
String类的equals()方法判断两个字符串对象的内容是否相同时,是区分大小写的。如要忽略字符串内字符的大小写,可以使用String类的equalsIgoreCase()方法来判断,使用方法和equals()方法相同。
案例2:使用equals()方法和equalsIgoreCase()方法来判断字符串是否相等。
在PbaseUnit11项目unit包下创建StringEqualSample2类。代码如下:
/**
*
Title:StringEqualSample2.java*
Packageunit*
Description:Java基础知识课程案例*
author编程训练营*
date*
versionV1.0*/
packageunit;
/**
*
ClassName:StringEqualSample2*
Description:字符串(判断字符串是否相等)案例2*
author编程训练营*
date*
*/
publicclassStringEqualSample2{
/**
*
Title:main*
Description:Java程序入口main方法*
paramparamargs参数*
returnvoid返回类型*
throws*/
publicstaticvoidmain(String[]args){
//创建字符串对象
StringszTempA=helloWorld;
StringszTempB=HelloWorld;
StringszTempC=newString(HelloWorld);
StringszTempD=newString(HelloWorld);
//szTempA和szTempB区分大小写判断
if(szTempA.equals(szTempB))
{
System.out.println(szTempA等于szTempB(区分大小写));
}
//szTempA和szTempB不区分大小写判断
if(szTempA.equalsIgnoreCase(szTempB))
{
System.out.println(szTempA等于szTempB(不区分大小写));
}
//szTempC和szTempD判断
if(szTempC.equals(szTempD))
{
System.out.println(szTempC等于szTempD(区分大小写));
}
}
}
程序结构分析
程序创建了四个字符串对象,szTempA和szTempB用字符串常量赋值,szTempA和szTempB的内容有字符大小写的区别,用于实验eauals()方法和equalsIgnoreCase()方法。szTempC和szTempD使用new运算符创建,这两个字符串的内容相同,但内存地址不同,用于验证eauals()方法。
程序执行结果如下图所示: