-
包装类,自动装箱,自动拆箱
- 常量池 : Byte Short Integer Long四种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character 创建了数值在[0,127]范围的缓存数据,Boolean直接返回了true 或者 false ; float和double 没有常量池
- 自动装箱 : 调用包装类的valueOf() 方法
- 拆箱调用的是xxxValue()方法
- 基本数据类型与包装类比较的时候,包装类会自动拆箱为基本数据类型进行比较
-
class Value{ public int i=15; } public class Test{ public static void main(String argv[]){ Test t=new Test( ); t.first( ); } public void first( ){ int i=5; Value v=new Value( ); v.i=25; second(v,i); System.out.println(v.i); } public void second(Value v,int i){ i = 0; v.i = 20; Value val = new Value( ); v = val; System.out.println(v.i+" "+i); } }
second(Value v, int i) 中的v 并不是first()方法中的v,而是second()方法栈里的局部变量,只是指向了first方法中的对象v, 然后 v.=20改变了first()方法中的对象v.i , 接着v = val的时候并不是让first中的v指向了val而是将second()方法栈中的v指向了val所以并不会改变first中的v的值.
-
异常:
- Throwable的两个子类:Exception(程序可处理异常) 和 Error(程序无法处理的异常)
- Exception分为: RuntimeException(非检查异常),和 自己Exception(已检查异常,通常为编译时异常)
-
Hashtable和HashMap
- Hashtable是一个哈希表,继承的是Dictionary类,实现了Map接口
- HashMap是基于哈希实现的,每一个元素都是一个key-value键值对,内部是通过单链表解决冲突问题,容量不足时会自动增长,该类继承自AbstractMap,实现Map接口
- Hashtable是线程安全的,HashMap是线程不安全的
- HashMap允许将null作为一个entry的key或者value,但是hashtable不允许
- Hashtable和HashMap的区别总结:
-
继承父类的不同
Hashtable继承Dictionary类,HashMap继承AbstractMap类
但是两者都实现了Map接口
-
线程安全不同
hashtable线程安全,hashmap线程不安全
-
key和value是否允许null值
hashtable中,key和value都不允许出现null值
hashmap中,key和value都可以出现null值,但是作为键只能有一个,作为值可以有多个
-
是否提供contains方法
hashtable提供了contains,ContainsKey和ContainsValue三个方法,其中contains和containsValue功能相同
hashMap提供了containsKey和ContainsValue方法
-
两者遍历方式的内部实现不同
hashtable和hashmap都使用了iterator,由于历史原因,hashtable还是用了Enumeration的方式
-
hash值不同
hashtable直接使用对象的hashcode,而hashmap重新计算hash值
-
内部实现使用的数组初始化和扩容方式不同
hashtable在不指定容量的情况下默认容量是11,而hashmap为16, HashTable
-