如果是基本数据类型,==判断的是值
如果是对象类型,==判断的是对象的地址
public class Demo01 {
public static void main(String[] args) {
// 例一
String str = "yh";
String str1 = "yh";
System.out.println("例一:" + (str == str1));
// 例二
String str2 = new String("yh");
String str3 = new String("yh");
System.out.println("例二:" + (str2 == str3));
// 例三
int i1 = 25;
int i2 = 25;
System.out.println("例三:" + (i1 == i2));
// 例四
Test t1 = new Test();
Test t2 = new Test();
System.out.println("例四:" + (t1 == t2));
}
}
"equals":D:UsersJavajdk1.8.0_102binjava.exe ...
例一:true
例二:false
例三:true
例四:false
public boolean equals(Object o):默认比较内容,重写可以比较内容,快捷键自动生成
package com.yang.Object;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写equals方法
@Override
public boolean equals(Object o) {
//比较地址是否相同,如果相同,内容肯定是一样的
if (this == o) return true;
//1. 判断参数是否为null,如果是null就没必要比了,返回false
//2. 判断两个对象是否来自同一个类
if (o == null || getClass() != o.getClass()) return false;
//向下转型
Student student = (Student) o; //student = s2
//比较年龄是否相同
if (age != student.age) return false;
//比较姓名是否相同
return name != null ? name.equals(student.name) : student.name == null;
}
}
public class equalsDemo {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("李华");
s1.setAge(25);
Student s2 = new Student();
s2.setName("李华");
s2.setAge(25);
//比较两个对象的内容是否一致
// System.out.println(s1==s2); //false,原因:==比较的是地址值,
//new要在堆中开辟新的地址值,
//s1与s2地址值肯定不一样,此处比较的不是内容
// System.out.println(s1.equals(s2)); //false,原因如下:
//解决方案:要在Student类中重写 equals方法(见Student类),然后调用
System.out.println(s1.equals(s2)); //true
}
}



