Java中equals和==

        ==是关系运算符,生成的是一个布尔型的结果。

        Java编程思想中指出——它们评价的是运算对象值之间的关系。比较的对象可以是任何数据类型。

        equals是一个方法,只有对象实例来调用,返回的也是布尔型结果。

1、==的比较

        我们用三个例子说明==的作用结果。

1.1、基本类型比较

        基本类型储存的就是值,所以当==作用在两个基本类型时候,比较的就是两个值是不是一样。

        注意,数值型是区分有符号和无符号的。

        也就是:

double a2 = 3.14d;
double b2 = -3.14d;
System.out.println(a2==b2);

        输出结果是false。

1.2、基本类型包装类比较

        基本类型包装类的比较和基本对象类型就不一样了,因为包装类已经是类这个级别了,不再是基本数据类型了。

        当==作用在两个对象上的时候,比较的不单单是对象的内容是否相等,他也会判断对象的引用是否相同。

        在说明包装类==比较时候,我们以String为例,先说明一下String类型创建对象时候的特点。

        在JVM中存在一个String池——这个池中保存了很多String对象,可以被共享使用,从而提高效率。

        当我们声明一个String对象时候(String a = "123"),如果String池中已经存在"123"这种String对象,那么直接将这个String对象的引用赋值给a;

        当我们创建一个String对象时候(String a = new String("123")),不管String池中有没有"123"这个String对象,他都会先创建"123"这样一个字符串对象,然后将引用赋值给a。

        我们用一些例子来看看==作用在String对象时候的结果:

String a = "123";
String b = "123";
String c = "234";
String d = new String("123");
String e = new String("123");


        不管c和哪个对象比较,结果肯定都是false,所以关于c的比较我们就略过,重点看以下几个比较:

System.out.println(a==b);
System.out.println(a==d);
System.out.println(b==d);
System.out.println(d==e);

        对于a,b都是字符串的声明都是从String池中获取到的"123"的引用,所以a==b结果显然是true。

        对于d,e都是字符串对象的创建,不管String池中有没有"123"这种字符串的引用,都会使用new关键字创建两个对象,哪怕两者内容相同,因为是两个对象,所以d==e结果显然是false。

        对于声明的对象a,b和创建的对象d,e比较,因为不是同一个对象的引用,即使内容相同,结果都是false。

        实际输出:

true
false
false
false

1.3、实例对象比较

        实例对和包装类的比较象的比较类似,比较的方面除了内容也还有引用。

        当然实例对象没有String池这个东西,所以如果是创建的两个对象作比较,返回的会是false;如果声明了两个对象的引用,并且指向同一个对象,那么比较的结果就会是true:

        假设我们有个类,类名是Person:

Person p1 = new Person();
Person p2 = new Person();
Person p3 = p1;
Person p4 = p1;
p1==p2;//false
p3==p4;//true
p1==p3;//true

2、equals的比较

        同样的,我们从三个方面说明equals的作用结果:

2.1、基础数据类型:

        equals是一个方法,只能是对象实例来调用,基本类型显然是不能调用equals方法。

2.2、基本类型包装类

        以String为例:我们先看根类Object类中equals方法的说明:

        String对equals方法进行了重写:


        所以当使用equals比较两个字符串对象的时候,比较的都是两个对象内容是否一致:

String a = "123";
String e = new String("123");
a==e;//false
a.equals(e);//true


2.3、实例对象

        实例对象调用equals方法和使用==的效果是一样的,如果你并没有重写equals方法的打算。

        从实现来看,对象调用equals方法返回的结果就是==作用在两个对象上的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值