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值的相关信息,否则会导致内存泄露问题。
二、基本数据类型
基本类型 | 位数 | 字节 | 默认值 | 对应包装类 |
---|---|---|---|---|
byte | 8 | 1 | 0 | Byte |
short | 16 | 2 | 0 | Short |
int | 32 | 4 | 0 | Integer |
long | 64 | 8 | 0L | Long |
float | 32 | 4 | 0f | Float |
double | 64 | 8 | 0d | Double |
char | 16 | 2 | ‘u0000’ | Charater |
boolean | false | Boolean |
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没有自动装箱池。这种设计了享元设计模式,详见享元模式。