== :判断左右两端的数据是否相等
equals :object类提供的一个方法,判断两个对象是否相等
equals方法可以自己重写
1.equals和==辨析
package practice.p1;
public class Cat {
String name;
String color;
public Cat(String name,String color) {
this.name=name;
this.color=color;
}
public boolean equals(Cat c) { //重写equals方法,改成我们想要的判断逻辑
if(this.color==c.color) {
return true;
}else
return false;
}
public static void main(String args[]) {
Cat c1=new Cat("小华","红色");
Cat c2=new Cat("小华","红色");
System.out.println(c1==c2); //false,==默认判断对象的内存地址是否一致,一般用在基本数据类型上
//equals重写前:
//System.out.println(c1.equals(c2));//默认调用object提供的equals方法;false
//重写后:
System.out.println(c1.equals(c2)); //true
}
}
2.创建字符串对象辨析
package practice.p1;
public class Test {
public static void main(String args[]) {
String s1="xiaohong";
String s2="xiaohong";
//第二个xiaohong没有占用内存空间,与第一个指向相同的对象
System.out.println(s1==s2); //true,指向相同的对象,故内存地址一样
System.out.println(s1.equals(s2)); //true
String s3=new String("钢精");
String s4=new String("钢精");
System.out.println(s3==s4); //false,两个对象内存地址不同
System.out.println(s3.equals(s4)); //true,判断两个字符串内容是否相同
}
}
3.new String效果解释
四.小练习:用户输入登录
package practice.p1;
import java.util.Scanner;
public class Test {
public static void main(String args[]) {
String username="admin";
String userword="123";
Scanner in=new Scanner(System.in);
System.out.println("请输入用户名:");
String uname=in.nextLine();
System.out.println("请输入密码:");
String uword=in.nextLine();
//判断用户名密码是否相等,用equals方法,登陆成功
if(uname.equals(username)&&(uword.equals(userword))) {
System.out.println("登陆成功!");
}else {
System.out.println("登录失败!");
}
//若使用==判断,登录失败,因为不同对象内存地址不同
if(uname==username&&uword==userword) {
System.out.println("登陆成功!");
}else {
System.out.println("登录失败!");
}
}
}