随笔分类 - Java面试题
摘要:Java程序不是直接跑在机器上,而是跑在虚拟机(JVM)上,将Java源码经过编译后在虚拟机上运行的class文件即为字节码,字节码也就是虚拟机能理解的代码。 每一种平台的解释器不同,但实现的虚拟机是相同的。Java源程序经过编译器编译为字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送
阅读全文
摘要:区别: HashMap中允许存在null的键和值,但HashTable不允许 HashTable中每个方法都有synchronized修饰,所以HashTable是线程安全的,而HashMap不是。但多线程情况下仍然不建议使用HashTable,而是使用CurrnetHashMap,因为HashTa
阅读全文
摘要:**ArrayList:**基于动态数组。连续内存存储,适合下标访问(随机访问)。可以很好地利用CPU缓存,局部性原理 扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,将老数组数据拷贝到新数组,如果不是尾部插入数据还会涉及到元素移动(往后复制一份,插入新元素)。因此,ArrayList使用
阅读全文
摘要:list:按对象进入顺序保存对象,是有序的,对象可重复,允许多个null元素,可以使用迭代器Iterator取出元素进行遍历,也可以使用get(index)进行下标访问 set:是无序的,对象不可重复,最多允许一个null元素,只能通过迭代器Iterator遍历元素
阅读全文
摘要:方法层面的比较 接口中的方法只能是抽象方法,即public abstract方法,不能有非抽象方法。但可以提供默认方法(default方法),子类可以不重写 抽象类中的方法可以是抽象方法也可以是非抽象方法。 变量层面的比较 接口中的变量只能是public static final类型 抽象类中的变量
阅读全文
摘要:**重载:**发生在同一个类中,方法名相同,参数列表不同(参数类型、参数个数、参数顺序),访问修饰符和返回值可以不同。 **重写:**发生在父子类中,方法名和参数列表必须相同,访问修饰符的范围要大于等于父类,返回值范围要小于等于父类,抛出的异常范围要小于等于父类。如果父类方法为private修饰,则
阅读全文
摘要:String是final修饰的,是不可变的,每次操作都会产生新的String对象,而StringBuffer和StringBuilder都是在原对象上操作。 StringBuffer是线程安全的,而StringBuilder是线程不安全的,因为StringBuffer的方法都是synchronize
阅读全文