判断字符串相等有两种方式:一种方式是用“==”运算符来判断,主要是判断两个字符串的内存地址是否相等;一种方式是用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方法
* @param@param args 参数
* @return void 返回类型
* @throws
*/
publicstaticvoidmain(String[] args) {
// 创建字符串对象
String szTempA = "Hello World";
String szTempB = "Hello World";
String szTempC = new String("Hello World");
String szTempD = new String("Hello World");
// 判断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(String s);
其中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方法
* @param@param args 参数
* @return void 返回类型
* @throws
*/
publicstaticvoidmain(String[] args) {
// 创建字符串对象
String szTempA = "hello World";
String szTempB = "Hello World";
String szTempC = new String("Hello World");
String szTempD = new String("Hello World");
// 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()方法。
程序执行结果如下图所示: