HashMap和Hashtable的区别。
相同点:都实现了Map接口
不同点:HashMap是线程不安全的,Hashtable是线程安全的。HashMap可以接受null作为键值对的key值,hashtable不可以。hashtable由于是线程安全的,所以在单线程的环境下比hashmap慢。
jdk1.5以后有了hashtable的替代类ConcurrnetHashMap,是线程安全的,并且速度比hashtable快
什么时候用assert
判断程序在某个时间点是否到达了某种要求的状态,可以用assert断言。具体的例子是去银行取钱,取出的钱数不能为负,不能比余额大等限制,可以用断言来实现程序到达的状态。
GC是什么? 为什么要有GC
garbage collection 垃圾回收。
String s = new String(“xjq”);创建了几个String Object?
如果“xjq”在常量池中已经存在,那么值创建了一个String对象在堆上
如果“xjq”在常量池中不存在,那么会创建两个String对象,一个创建在常量池中一个创建在堆上。
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
12 -11
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
前面的句子无法编译,因为s1 = s1 + 1
中的1默认是int类型的,编译器提示将int变为short会有精度损失的错误。
s1 = s1 + (short)1;//强制转化也不行
s1 = (short) (s1 + 1);//这样可以
//因为在进行数学运算时,数据类型会自动发生提升到运算符左右的较大的类型,因此上一句s1提升为int类型,右边的int类型强制转化为short出错
后一句不报错。
数组有没有length()这个方法? String有没有length()这个方法?
数组没有length方法,但是又length属性,String有length方法。
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set会使用对象的hashCode()和equals()方法来比较两个对象是否相等。HashSet会在内存中开设空间,每个空间会有哈希编码(HashCode),这个内存空间叫做哈希桶(Hash Bucket)。如果对象要加入HashSet,会调用对象的hashCode()取得哈希码,并尝试放入对应的哈希桶(内存)中,如果哈希桶中没有对象,则直接放入,如果有,则用equals()进行比较,为false则放入,为true则不放入。
对基础类型来说,==没有区别,但是对高级类型,包装类型,如果用==比较的是内存地址,equals比较的是两个内存地址保存的内容是否相同。
abstract class 和 interface的区别
- 本质是类和接口的区别,类是事物属性的抽象,接口是事物行为的抽象,也就是如果a是一个类,事物是is a的关系,b是一个接口,事物是has a的关系。
- abstract class是一个抽象类,修饰方法时是一个抽象方法,这个方法不包含实现的代码块,抽象类必须由子类继承,但是抽象方法不一定由子类实现。但是如果是实现某种接口的类,子类必须全部实现接口的所有方法。如果接口中增加了一个新的方法,那好像所有实现了这个接口的类都需要修改吧,好像又不是,jdk1.8有了接口默认的实现方式,用default修饰方法。
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是重载,是指一个方法中可以含有相同的方法名,但是方法的参数类型或者参数顺序不同,返回类型也可以不同。
Override是重写,一种是对接口方法的重写,一种是对父类同种方法的重写,重写是返回的参数顺序,数目,返回类型都必须相同的,就是函数的壳是一样的,但是内容不一样。