Long和String类型中的equals比较原理和如何比较

一、Long和String类型如何做比较

String a = "101";
Long b = 101L;
System.out.println("a.equals(b):"+a.equals(b));
System.out.println("Long.parseLong(a)==b:"+(Long.parseLong(a)==b));
System.out.println("a.equals(b+\"\"):"+a.equals(b+""));
System.out.println("a.equals(b.toString()):"+a.equals(b.toString()));

发现:两者做比较的时候需要转化成同一类型做比较才可以

比较方法结果
a.equals(b)false
Long.parseLong(a)==btrue
a.equals(b+"")true
a.equals(b.toString())true

二、Long和String类型中的equals比较原理

最近写代码,发现一个小知识点,不注意就进坑了,原因是在比较对象的时候,没有注意其数据类型,而仅仅是看到了其字符串的值,就想当然的认为使用equals比较,Java会只比较其值,而不比较其数据类型。

打开源码后才发现了equals方法是先比较其数据类型的。

1.编写测试代码,重现问题出现的过程。定义一个String字符串101,定义一个Long类型的101,然后使用equals比较两者是否相同,使用syso输出比较结果。

刚开始我想的是,这难道不是去比较值吗,还会考虑数据类型吗?^_^最后发现我错了。

从输出结果可以看出两个比较都是输出的false,说明两者确实不相等。

2.打开上面的equals方法,发现是调用的String类重写的equals方法:(有一个关键字instanceof,下面专门写个例子测试)

一:他是先看两个引用是否相同,如果相同则表示两者完全是同一个东西没什么好说的。

二:如果两者不是同一个对象,则查看anObject是不是String类的对象,如果不是,则表示两者不等。

三:如果anObject是String类的对象,则比较亮着字符串是否相同。

3.打开第二个equals方法,发现是调用的Long类重写的equals方法:

一:判断obj是否是Long类型

二:如果是:则直接比较两者的值是否相等

4.从这里就可以看出,两者肯定不同,原因就是其数据类型不同。即有一个instanceof判断,instanceof的意思就是左边的对象是否是右边类的实例。当然这里面还隐含着一种特殊的情况,即左边的对象是右边类的子类的实例,也是成立的。且看测试代码

5.测试这两种情况:①左边的对象是右边类的实例;②左边的对象是右边类的子类的实例。

(1)首先写一个类Father,再写一个类Son继承Father。

(2)编写测试类

6.查看输出结果,两个true,也就证实了我上面所说的。

instanceof操作符满足下面两种情况就是true:①左边的对象是右边类的实例;②左边的对象是右边类的子类的实例。

本文转载至:https://jingyan.baidu.com/article/5bbb5a1bd9f3b013eba179b4.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值