Logo

郎哥编程

判断字符串是否相等

2019-12-10 1208

判断字符串相等有两种方式:一种方式是用“==”运算符来判断,主要是判断两个字符串的内存地址是否相等;一种方式是用String类的equals()方法来判断,主要是判断两个字符串的内容是否相等。

使用运算符“==”来判断

使用运算符“==”判断两个字符串是否相等时,它会判断两个字符串的内存地址是否相同,如果相同返回true,否则返回false。

案例1:创建两个字符串对象,使用“==”判断两个字符串是否相等。

在PbaseUnit11项目unit包下创建StringEqualSample1类。代码如下:

/** 
* @Title: StringEqualSample1.java 
* @Package unit 
* @Description:Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
/** 
* @ClassName: StringEqualSample1 
* @Description: 字符串(判断字符串是否相等)案例2
* @author 编程训练营 
* @date  
* 
*/
 
public class StringEqualSample1 {
 
    /** 
    * @Title: main 
    * @Description:Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(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是否相等。

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

image.png                                             

从执行结果可以看出,判断结果是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 
* @Package unit 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
/** 
* @ClassName: StringEqualSample2 
* @Description: 字符串(判断字符串是否相等)案例2
* @author 编程训练营 
* @date 
* 
*/
 
public class StringEqualSample2 {
 
    /** 
    * @Title: main 
    * @Description:Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(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()方法。

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

image.png


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论