java 中那些区别 [面试必备]

最近在准备面试,所以基础回顾中 。。。 不断更新

 

1. 抽象类和接口的区别

@1  子类只能继承一个抽象类作为父类,但是可以实现很多歌接口,用逗号隔开

@2 抽象类可以定义 public protected package private 的静态非静态  ,final 非 final 属性 。但接口的属性必须是public static final

 

2. int 与 Integer 的区别 

@1  int 是基本类型32位长度的整数 , integer是封装类

@2  int 存储在虚拟机栈中,integer 对象存储在堆中。 

注意:Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

 

3. String 和StringBuffer 和 StringBuilder 的区别

@1  String 是immutable的,内部private final char[]  ;   

StringBuilder 内部char[] 

StringBuffer  内部 private transient char[]  内部方法均为sychonized

@2  只有StringBuffer  是线程安全的

 

4.  HashMap和Hashtable的区别

@1  HashMap可以存放 null
Hashtable不能存放null

@2 HashMap不是线程安全的类
Hashtable是线程安全的类

@3 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

@4 Hashtable数组 + 链表方式存储

HashMap 数组+链表/红黑树

 

原文链接: Javarevisited 翻译: ImportNew.com 唐小娟
译文链接: http://www.importnew.com/7010.html

 

5.sleep() 和 wait() 有什么区别

sleep 是Thread类的方法,指的是当前线程暂停。
wait 是Object类的方法, 指的占用当前对象的线程临时释放对当前对象的占用,以使得其他线程有机会占用当前对象。 所以调用wait方法一定是在synchronized 中进行

 

6. lock 与 synchronized 

@1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。
@2. Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋一直获取下去。 借助Lock的这个特性,就能够规避死锁,synchronized必须通过谨慎和良好的设计,才能减少死锁的发生。
@3. synchronized在发生异常和同步块结束的时候,会自动释放锁。而Lock必须手动释放, 所以如果忘记了释放锁,一样会造成死锁。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值