Java基础之equals和==的区别

  这个问题在面试或者源码分析都经常出现,先不着急,让我们来了解一下Java中的数据类型。

  java中的数据类型分为: 基本数据类型和引用数据类型。

  基础类型

  4种整数类型:int、long、byte、short

  2种浮点数类型:float、double

  1种字符类型:char

  1种布尔类型:boolean

  引用数据类型

  类

  接口

  数组

  简单来说:

  对于基本类型来说,== 比较的是值是否相等

  对于引用类型来说,== 比较的是两者在内存中存放的地址(堆内存地址)

  

  运行代码,可以得到以下结果:

  

  str1和str2的内存地址都是1174290147,所以使用==为true,但是str3和str4的地址是不同的,所以为false。

  equals()

  所有类都是继承于Object这个超类的,有一个equals()方法

  

  这个方法很简单,就是比较对象的内存地址的。所以对象没有重写这个方法时,默认使用此方法,即比较对象的内存地址值。

  由于类的多态,如果我i们重写了equals()方法,那么判断结果将为我们自己定义。下面来看下String类重写的方法:

  

  可以看出,String的equals()方法仅仅是对比它的 数据值,而不是对象的内存地址,所以不管String对象的内存地址是否相同并不影响其结果,equals()比较的仅仅是数据值。

  equals()和hashCode的关系可以看:

  月薪过万的java程序员连hashCode都不知道

  总结

  equals()和==的区别:

  ==

  基本类型:对比它们的值是否相等

  引用类型:对比它们的内存地址是否相等

  equals()

  引用类型:默认情况下,对比它们的地址是否相等;如果equals()方法被重写,则根据重写过程来比较

  大连渤海医院电话 http://jbk.39.net/yiyuanfengcai/lx_dlbhyy/

猜你喜欢

转载自www.cnblogs.com/2655534102gyt/p/10626758.html
今日推荐