java

注册

 

发新话题 回复该主题

判断String类是否相等米粒教育 [复制链接]

1#

判断字符串相等有两种方式:一种方式是用“==”运算符来判断,主要是判断两个字符串的内存地址是否相等;一种方式是用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

paramargs参数

*

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方法

*

param

paramargs参数

*

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()方法。

程序执行结果如下图所示:

分享 转发
TOP
发新话题 回复该主题