Java 中的“==”与“equal()”

在Java中,“==”与equal是一对容易混淆的概念,到底他们有什么区别、什么时候用==,而什么时候又应该用equal()呢?
首先说一下,Java中的变量按照数据类型来分可以分为基本数据类型(如:byte,short,char,int,long,float,double等)和引用数据类型(类、接口、数组)。
对于“==”而言
一般“==”左右两边用的是基本数据类型,实际上其会判断左右两边对应的ASCII值是否相等,相等则返回true. 而equal方法是不能用于这些原始数据类型的。
而若“==”接的是引用类型(如两边是对象、或数组名),其比较的是地址值,即左右两边的地址是否指向同一个对象。是则返回true。所以若“==”接的是引用类型,则其是用来判断左右两边是否为同一个对象。
在这里有一个特别的,即String数据类型,其属于引用类型。但其用“==”判断时有两种情况,如下面的代码图所示:
若是使用基本数据类型的方法赋值,a==b为true,即它们指向的是同一个对象。而若使用new的方法新建对象是,此时a==b为false,也就是说a与b为两个不同的对象。

    @Test
    public void test() {
    	String a="123";
    	String b="123";
    	System.out.println(a==b);//true
    	
    	String c=new String("123");
    	String d=new String("123");
    	System.out.println(c==d);//false	
    }

对于equal方法而言
其实所有的的类都直接或间接继承自Object类。Object类中equal方法的定义如下:

 public boolean equals(Object obj) {
        return (this == obj);
    }

可以看到其用的就是“==”,也就是说,如果你不在类中重写equal方法,那你使用的实际上就是“==”,所以一般对于自定义的类,我们要使用equal方法一般都要对其重写。对String中的equal已经被重写过了,所以我们可以直接用于判断两字符串是否相同。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值