JAVA基础

本文详细介绍了Java中==和equals的区别,以及hashCode()和equals()的联系。强调了在重写equals()时必须重写hashCode()的重要性,并指出对象缓存的细节。此外,还阐述了基本数据类型和包装类在声明、存储、初始值、使用方法上的不同,以及装箱和拆箱的操作及其注意事项。
摘要由CSDN通过智能技术生成

JAVA基础

一、Java语法

1、==和equals的区别

==:基础数据类型比较值,引用数据类型比较内存地址。(概括说就是比较两个对象的地址是不是相等)。

equals():比较两个对象是否相等,不能用于比较基本数据类型,在Object类中默认比较的就是两个对象的地址是否相等。

2.hashCode()和equals()的区别和联系

​ 在Java中任何一个对象都具备equals()和hashCode()方法,因为他们都是在Object类中定义的。

​ equals()方法用来判断两个对象是否“相同”,如果“相同”返回true,否则返回false。

​ hashCode()方法返回一个int数,在Object类中的默认实现是:将该对象的内部地址转换成一个整数返回。

1、若重写了equals()方法,则有必要重写hashCode()方法。

2、若两个对象equals()返回true,则hashCode()有必要也返回相同的int数。

3、若两个对象equals()返回false,则hashCode()不一定返回不同的int数。

4、若两个对象hashCode()返回相同int数,则equals()不一定返回true。

5、若两个对象hashCode()返回不同int数,则equals()一定返回false。

6、同一对象在执行期间若已经存储在集合中,则不能修改影响hashCode值的相关信息,否则会导致内存泄露问题。

二、基本数据类型

基本类型位数字节默认值对应包装类
byte810Byte
short1620Short
int3240Integer
long6480LLong
float3240fFloat
double6480dDouble
char162‘u0000’Charater
booleanfalseBoolean

1.基本数据类型和包装类的区别

1、声明方式不同,基本数据类型不使用new关键字,包装类需要使用new 关键字在队中分配存储空间。

2、存储方式不同,基本类型直接将变量存储在堆栈中,包装类将对象放在堆中,通过引用来使用。

3、初始值不同,基本数据类型int等初始值为0,boolean初始值为false,包装类初始值null。

4、包装类是对象,拥有方法和字段,对象的调用通过引用对象的地址,基本数据类型不是。

5、包装类是引用传递,基本类型是值传递。

6、使用方法不同,基本数据类型直接赋值使用就好,包装类可以直接赋值,也可以在集合中使用。

2.装箱与拆箱

装箱:就是将基本数据类型转成包装类,比如int转成Integer对象。

拆箱:就是将包装类转成基本数据类型。

自动装箱和拆箱的注意点

1、避免生成无用对象增加GC压力

​ 包装类在遇到算数运算符或比较运算符是会进行自动拆箱,然后数值进行相加或比较大小操作,最后在自动装箱,如果是在一个循环中就会常见多个无用的包装类,这样就增加了垃圾回收的工作量,降低了程序的性能。

2、对象初始化

​ 当基本数据类型和包装类进行比较时,如果包装类没有进行那个对象初始化,在自动拆箱的过程中则会抛出空指针异常。

3、对象缓存

​ Java默认会对-128到127的Byte、Short、Integer和Long对象进行缓存,当创建的对象在这个数值范围则返回已缓存的对象,否则创建新的对象。Character缓存的范围是0~127,而Float和Double没有自动装箱池。这种设计了享元设计模式,详见享元模式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值