No.1 java数据类型及大小范围?
- 八种基本数据类型:
-
字符型:char -
字节型:byte -
整数型:short,int,long -
浮点数型:double,float -
布尔类型:boolean
- 引用数据类型 比如String等
No.2 方法重写与重载的区别
- 方法重载:一个类中多个方法只有方法名相同,参数返回值等不同
- 方法重写:子类继承父类的方法后根据需求改写父类中方法的方法体
No.3 什么是String常量池,为什么说String不可变
String常量池即“字符串常量池”,位于JVM的堆中,用来存储字符串常量。创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中,并返回其引用。以此提高空间利用率。String 是使用字符串数组保存字符串(private final char value[]),因此String不可变,只有指向的地址值是可变的。
No.4 String/StringBuffer/StringBuilder 区别?
可变性:
String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。
线程安全性:
String中的对象是不可变的,也就可以理解为常量,线程安全。
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁(Synchronized),所以是线程安全的。
StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
性能:
每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。
StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。
相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结
如果要操作少量的数据用 = String
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
No.5 常用关键字:final,finally,finalize;
final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。
No.6 public,default,protected,private;static权限
public:可以被所有其他类所访问
private:只能被自己访问和修改
protected:自身、子类及同一个包中类可以访问
default:同一包中的类可以访问,声明时没有加修饰符。