1.&和&&的区别?
1.&:按位与,逻辑与
按位与:0&1=0;0&0=0;1&1=1
逻辑与:a==b&b==c(即使a==b已经是false了,程序还会继续判断b是否等于c)
2.&&:短路与
a==b&&b==c(当a==b位false则不会继续判断b是否等于c)
比如判断某对象中的属性是否等于某值,则必须用&&,否则会出现空指针
2.java中的final,finally,finalize的区别与用法
1.final
final是一个修饰符也是一个关键字
被final修饰的类无法被继承
final修饰一个基本数据类型的变量,则其数值一旦在初始化之后便不能更改;
如果是引用类型变量,则对其初始化之后便不能让其指向另一个对象。但是它指向的对象内容是可变的。
被final修饰的方法将无法被重写,但允许重载
注意:类的private方法会隐式地被指定为final方法
2.finally
finally是一个关键字。
finally在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出或者捕获,finally块都会执行,通常用于释放资源。
finally正常情况一定会被执行,但是有两个极端:
若果对应的try没有执行,则这个try块并不会被执行
如果在try块中jvm关机。例如system.exit(n),则finally块也不会执行
3.finalize
finalize()是Object类的protected方法,子类可以覆盖该方法以实现资源清理工作。GC回收对象之前都会调用这个方法。
3.hashCode()和equals()的区别
1equals既然已经能实现对比的功能了,为什么还要hashCode呢?
因为重写的equals里一般比较的比较全面比较复杂,这样的效率就会很低,而利用hashCode进行对比,则只要生成一个hash值进行比较就可以了,效率很高
2.hashcode既然效率这么高为什么还要用equals?
因为hashCode并不是完全可靠的,有时候不同的对象他们生成的hashCode也会一样,
所以hashCode只能说大部分可靠,并不是全部可靠。
总结:
equals相等的两个对象他们的hashCode肯定相等,也就是用equals对比是绝对可靠的
hashCode相等的两个对象他们的equals不一定相等,也就是hashCode不是绝对可靠。
3.java中操作字符串都有那些类?他们之间有什么区别?
String ,StringBuffer,StringBuilder
String和StringBuffer,StringBuilder的区别在于String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer,StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String
StringBuffer和StringBuilder最大的区别在于,StringBuffer是线程安全的,二StringBuilder是非线程安全的,但StringBuilder的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer
4.String str=‘a’与String str=呢哇String("a")一样吗?
不一样,因为内存的分配方式不一样。
String str ="a"-->常量池 String str=new String("a")-->堆内存
5.抽象类能使用final修饰吗?
不能。定义抽象类就是让其他类继承的,而final修饰的类不能被继承