java对象的比较分析
关于对象的比较我们可以通过以下三种手段来实现
一、利用"=="比较引用
Java中,当比较简单类型变量时用"==",只要两个简单类型值相等即返回ture,否则返回false,而在对象的比较中,"=="运算符就是比较引用变量所指向的内存地址是否相同 ;
二、通过覆盖equals方法比较引用
User u1=new User("Tom"); User u2=new User("Tom"); User u3=u1; u3.setName("Jack"); u1==u3//true u1.equals(u3)//true u1==u2//false; u1.equals(u2)//false
三、重写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//false,按地址进行比较 s1.equals(s2)//true, 已重写,按值进行比较
三、手动重写equals方法比较对象
在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法。
public boolean equals(Object o) { //如果和自身比较,返回TRUE if(this==o) return true; //如果不是这个类的实例,返回FALSE 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; } //这里注意,比较操作是应该发生在person类内部函数上的 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)); } }
转载请注明原文链接!