字符串的比较
在比较具体的值的时候比较的是正常的
int a=10;
int b=10;
System.out.println(a==b);//c比较的数据值,结果为true
若是比较的是应用类型的数据的时候
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1==s2);//此时比较的是两个对象的地址空间
//若是直接赋值的话
String s1="abc";
String s2="abc";
System.out.println(s1==s2);//s1和s2是直接在串池内的,s2会直接复用s1的空间地址,得出来的结果一定是true,s1和s2的空间地址是相同的。
//对象的地址值和串池内的地址值相互比较
String s1=new String("abc");//在堆内开辟除的小空间,记录的是对内的地址值
String s2="abc";//记录串池内的地址值
System.out.println(s1==s2);//false
方法 | 作用 |
---|---|
boolean equals方法(要比较的字符串) | 完全一样才是true,否则为false |
boolean equalsIgnoreCase(要比较的字符串) | 忽略大小写(验证码) |
public static void main(String[] args) {
//1、创建两个字符串对象
String s1 = new String("abc");
String s2 = "abc";
//2、比较
boolean result = s1.equals(s2);
System.out.println(result);
//3、比较字符串的内容是否相等忽略大小写,只能是英文状态下
String s3 = new String("Abc");
String s4 = "abc";
boolean result1 = s3.equalsIgnoreCase(s4);
System.out.println(result1);
}
public static void main(String[] args) {
//1、键盘录入的abc
Scanner s1=new Scanner(System.in);
System.out.println("输入字符串:");
String result1=s1.next();
//2、代码中直接定义的abc
String s2="abc";
boolean result2=s1.equals(s2);
System.out.println(result2);
}
键盘录入的是new过的,是在堆内的小空间内的,而直接赋值是在串池的
结论:以后要是向比较难字符串的内容,就必须用String里面的方法
案例:实现用户登录
public static void main(String[] args) {
//已知正确的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
// 1、用户名和密码,两个变量
String rightUserName = "zhangsan";
String rightPassWord = "123456";
//2、用程序实现模拟用户登录,ctrl+alt+t可以实现多代码的包裹
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String userName = sc.next();
System.out.println("请输入密码:");
String passWord = sc.next();
//3、比较
if (userName.equals(rightUserName) && passWord.equals(rightPassWord)) {
System.out.println("登录成功!!!");
} else {
System.out.println("用户登录失败,用户名或密码错误,你还剩下" + (2 - i) + "次机会");
}
}
}