关于对象的比较我们可以通过以下三种手段来实现
一、利用"=="比较引用
Java中,当比较简单类型变量时用"==",只要两个简单类型值相等即返回ture,否则返回false,而在对象的比较中,"=="运算符就是比较引用变量所指向的内存地址是否相同 ;
二、通过覆盖equals方法比较引用
- User u1=new User("Tom");
- User u2=new User("Tom");
- User u3=u1;
- u3.setName("Jack");
- u1==u3
- u1.equals(u3)
- u1==u2
- u1.equals(u2)
三、重写equals()方法
在Java API中,有些类重写了equals()方法,这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等。
- String s1=new String("hello");
- String s2=new String("hello");
- s1==s2
- s1.equals(s2)
三、手动重写equals方法比较对象
在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法。
- public boolean equals(Object o)
- {
-
- if(this==o) return true;
-
- if(!o instanceof User) return false;
-
- final User u=(User)o
- if(this.getName().equals(u.getName())
- return true;
- else
- return false;
- }
最后给出一个标准的对象比较范例
- package javacompareDemo;
-
- class person{
- private String name;
- private int age;
- public person(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;
- }
-
- public boolean compare(person per){
- if(this==per)
- return true;
- if(this.name.equals(per.name)&&this.age==per.age)
- return true;
- else
- return false;
- }
-
- }
- public class ClassCompare1 {
-
- public static void main(String[] args) {
- person per1 = new person("影流之主",19);
- person per2 = new person("放逐之刃",18);
- person per3 = new person("影流之主",19);
- System.out.println(per1.compare(per2));
- System.out.println(per1.compare(per3));
- }
- }