==和equals的比较

基本的数据类型都放在stack(栈)中;引用类型变量放在stack(栈)中,真正的内容放在heap(堆)中。

堆:首先堆是动态分配的,JVM并不会自动释放这部分内存。只用等待系统的gc来进行内存回收。

栈:是在类加载中有系统静态分配的,而且分配时按照内存的高低地址分配。这部分内存系统会自动进行释放。

类Object是类层次结构的根类,每个类都使用Object作为超类,所有的对象(包括数组)都实现这个类的方法。

对于一个类一般都会重写Object类中的equals()、HashCode()、toString()方法,全部继承下来。

在String类中对equals方法进行了重写(改变父类中的函数功能以满足自己的需求)功能是比较两个字符串的值是否相同。

类似的还有Integer,Integer比较的也是值而非地址。

==:对于基本数据类型(int/long/short/float/double/byte/char/boolean)比较的是值;

        对于封装类比较的是对象的引用---在堆中存储的地址是否相同。

equals不能用于基本的数据类型,只能用于类变量;

Object类中的equals方法和“==”是一样的,Object的equals源码是比较hashcode的,没有区别;

           而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,此时equals比较的是内容值。

当自己创建类时,自动继承了Object的equals方法,此时比较自定义类用equals和==是一样的,但是要想实现不同的等           于比较,必须重写equals方法。例如创建一个Student类,new了几个student实例,我们在程序中怎么判断这几个实例是否是同一个学生呢?这时候就可以重写equals方法了(定义按学号来比较,学号相等则对象实例相等)。

例如,两个对象值相同(x.equals(y) == true),他没说是谁的对象,如果是Object类的对象,,equals( )比较的是地址值,
  如果是String类的对象,,,String类重写了equals( )比较的是内容


               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值