2017.07.20

今天在公司主要熟悉表中字段的业务,鉴于暂时没有完全掌握,来说说在技术上对Java的一些补充。首先是Java中equals()和==的区别,equals()和==要分对象来比较。
第一,如果是基本数据类型byte,short,char,int,long,float,double,boolean,他们的比较只能有==来进行。

    public class Fengkuan1 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int int1=1;
    byte byte1=1;
    long long1=1;
    boolean boolean1=true;
    boolean boolean2=false;


    System.out.print(int1==byte1);

    System.out.print(int1==long1);
    
    System.out.print(boolean1==boolean2);
    

}

}

第二,如果比较的Object对象也是没有区别的,equals()和==都比较的是地址值。

     public class Fengkuan2 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Object obj1="ad";
    Object obj2="ad";


    System.out.print(obj1==obj2);
    
    System.out.print(obj1.equals(obj2));


}

}
既然比较的是地址值,那么为什么是相同的呢,以为在Java的JVM里面有一个缓冲池,只要没有新开辟内存空间,在缓冲池里面有的,那么他们的地址值都相同。

第三,如果是Sring类或者其他继承Object类,然后改写了里面equals()方法,那么情况就不同了。

    public class Fengkuan {
public static void main(String[] arg)
{
    String str1="Object";   //1
    String str2="Object"; //2
    String str3=new String("Object");   //3
    
    System.out.print(str1==str2);
    
    System.out.print(str1.equals(str2));
    
    System.out.print(str1==str3);
    
    System.out.print(str1.equals(str3));
    
}

}
结果是true true false ture。
第一个true很好理解,第二个true就不好理解了。为什么呢,因为String方法重写了equals(),那么比较的不再是地址值了,而是地址值里面的内容,地址值里面内容相同就行,第三个比较的是地址值,新开辟的地址值肯定不一样。第四个比较的是内容,内容一样就行了。

转载于:https://www.cnblogs.com/linjingjia/p/7215561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值