JAVA中==和equals的区别

关于对象的比较我们可以通过以下三种手段来实现
一、利用"=="比较引用
Java中,当比较简单类型变量时用"==",只要两个简单类型值相等即返回ture,否则返回false,而在对象的比较中,"=="运算符就是比较引用变量所指向的内存地址是否相同 ;
 
二、通过覆盖equals方法比较引用

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. User u1=new User("Tom");    
  2. User u2=new User("Tom");    
  3. User u3=u1;    
  4. u3.setName("Jack");    
  5. u1==u3//true    
  6. u1.equals(u3)//true    
  7. u1==u2//false;    
  8. u1.equals(u2)//false    

三、重写equals()方法
在Java API中,有些类重写了equals()方法,这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等。

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. String s1=new String("hello");    
  2. String s2=new String("hello");    
  3. s1==s2//false,按地址进行比较    
  4. s1.equals(s2)//true, 已重写,按值进行比较    

三、手动重写equals方法比较对象
在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法。
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public boolean equals(Object o)    
  2. {    
  3.    //如果和自身比较,返回TRUE    
  4.    if(this==o) return true;    
  5.    //如果不是这个类的实例,返回FALSE    
  6.    if(!o instanceof User) return false;    
  7.        
  8.    final User u=(User)o    
  9.    if(this.getName().equals(u.getName())    
  10.       return true;    
  11.    else    
  12.       return false;    
  13. }   

最后给出一个标准的对象比较范例
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package javacompareDemo;  
  2. //对象的比较  
  3. class person{  
  4.     private String name;  
  5.     private int age;  
  6.     public person(String name,int age){  
  7.         this.name=name;  
  8.         this.age=age;  
  9.     }  
  10.     public String getName() {  
  11.         return name;  
  12.     }  
  13.     public void setName(String name) {  
  14.         this.name = name;  
  15.     }  
  16.     public int getAge() {  
  17.         return age;  
  18.     }  
  19.     public void setAge(int age) {  
  20.         this.age = age;  
  21.     }  
  22.     //这里注意,比较操作是应该发生在person类内部函数上的  
  23.     public boolean compare(person per){                 
  24.         if(this==per)  
  25.             return true;  
  26.         if(this.name.equals(per.name)&&this.age==per.age)  
  27.             return true;  
  28.         else  
  29.             return false;     
  30.     }  
  31.       
  32. }  
  33. public class ClassCompare1 {  
  34.   
  35.     public static void main(String[] args) {  
  36.     person per1 = new person("影流之主",19);  
  37.     person per2 = new person("放逐之刃",18);  
  38.     person per3 = new person("影流之主",19);  
  39.     System.out.println(per1.compare(per2));  
  40.     System.out.println(per1.compare(per3));  
  41.     }  
  42. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值