在Java中比较两个字符串元素是否相等

在Java中比较两个字符串元素是否相等

发现问题:
学生管理系统中的删除某条信息时,欲将键入的要删除的学生名与数组中的学生名字做比较,相同则删除,但一直提示“该学生信息不存在”。

方法代码:

public static void deleteStudent(String a[],String n){
        int flag=0;
        for (int i = 0; i < a.length; i++){
            if (n==a[i]) {
                a[i] = NULL;
                flag=1;
                System.out.println("已成功删除学生信息。");
            }
        }
        if(flag==0)
            System.out.println("该学生信息不存在。");
    }

解决问题:

将代码改为:

public static void deleteStudent(String a[],String n){
        int flag=0;
        for (int i = 0; i < a.length; i++){
            if (n.equals(a[i])) {
                a[i] = NULL;
                flag=1;
                System.out.println("已成功删除学生信息。");
            }
        }
        if(flag==0)
            System.out.println("该学生信息不存在。");
    }

即:比较两个字符串元素是否相等,应用方法"equals()",而不能直接使用"=="来比较。

问题小结:

原因分析:

首先举例可以用"=="和不可以用的情况:

不可用:

String a=new String("1qaz");
String b=new String("1qaz");
System.out.println(a==b); //false
System.out.println(a.equals(b)); //true

new 运算符 是动态执行的,两个字符串在程序运行时被分别构造,有两个不同的地址,但是有同样的内容。

可用:

String c="qwer";
String d="qwer";
System.out.println(c==d); //true
System.out.println(c.equals(d)); //true

该方法是静态方法,首先“qwer” 被构造出来, 然后c和d被指向了这个静态字符串,所以地址相等、内容一样。

深入分析:

"=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的栈内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用"=="操作符。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,下面的代码: String a=new String("foo"); String b=new String("foo"); 两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的对象所在地址是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值