在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被指向了这个静态字符串,所以地址相等、内容一样。
深入分析:
"=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的栈内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用"=="操作符。 |