1. Java中==、equals和hashCode的区别
1. 基本数据类型byte、char、short、int、double、float、long、boolean可以用==比较值是否相等
2. 引用数据类型使用==比较的时候是比较在内存中的地址值,对象是放在堆中的,地址值是放在栈中的,所以要比较对象的值是否相等,需要重写equals方法。默认情况下,equals比较的也是对象的引用(地址值),这个时候equals和==其实是等效的,如果重写了equals方法,就需要根据重写的方法来判断两个对象的内容是否相等了。
3. hashcode()返回的是一个数值
如果两个对象equals,那么hashcode一定相等
如果两个对象不equals,他们的hashcode有可能相等
如果两个对象hashcode相等,他们不一定equals
如果两个对象hashcode不相等,他们一定不equals
总结:
1. 重写后的equals方法用于比较对象的内容是否相等
2. hashcode方法一般在set集合中用到,将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入
2. int 和Integer的区别
1. int是基本数据类型,存储的数值,Integer是int的包装类,是一个对象,存储的是引用对象的地址
2. 如果Integer对象不是new出来的(),那么对象的值在[-128,127]之间相等的话,使用==返回的是true,否则返回的是false
Integer i1 = 127;Integer ji = 127;i1==j1返回true
Integer i1 = 128;Integer ji = 128;i1==j1返回false
3. Integer变量(不管是否是new出来的)与int变量比较,只要两个变量的值是相等的,结果都为true
3.String、StringBuffer和StringBuilder的区别
1.执行速度 StringBuilder > StringBuffer > String ,因为String是字符串常量,不可改变的,所以操作String的时候是不停的新建对象来操作的,之前的对象就被回收了。StringBuffer和StringBuilder是字符串变量,操作的时候操作的是一个对象
2. StringBuilder:线程非安全的
3. StringBuffer:线程安全的
总结:
1.如果要操作少量的数据用String
2.单线程操作字符串缓冲区下操作大量数据用StringBuilder
3.多线程操作字符串缓冲区下操作大量数据用 StringBuffer
4. final、finally、finalize的区别
1. final 用来修饰类,成员变量,成员方法,类不可被继承,变量不可改变,方法不可重写
2. finally与try catch一起使用,无论是否出现异常都可以走finally这个方法
3. finalize是类的方法,垃圾回收前会调用此方法,子类可以重写finalize方法实现对资源的回收
5. Serializable和Parcelable的区别
Serlizable是java序列化接口,在硬盘上读写,读写的过程中会产生大量临时变量,内部执行大量的I/O操作,效率很低;Parcelable是Android序列化接口,效率高,在内存中读写,但使用麻烦,而且对象不能保存到磁盘中










网友评论