java--面试中遇到的各种比较区别

1.Integer 与 int 的区别
  int是基本类型(Primitive),Integer是引用类型(Warpper).
  int是Java的原始数据类型,Integer是java为int提供的封装类.
  int的变量不需要实例化,Interger的变量需要实例化.
  int的默认值为0,Integer的默认值为null.
  int一般做数值参数,Integer一般做类型转换.

2.&和&&的区别:
  &和&&都是逻辑运算符号,&&又叫短路运算符
  & 不管前面的条件是否正确,后面都执行
  && 前面条件正确时,才执行后面,不正确时,就不执行

3. ArrayList和Vector的区别?
  (1).同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
  (2).数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

4.HashMap哈HashTable的区别
  相同点:都可以用来存储key-value的数据。
           都是通过哈希表实现。
  区别:HashMap是可以吧null作为key或value的, 而hashTable是不可以的。
        HashMap是线程不安全的,效率较高。 而HashTable是线程安全的,效率较低。

5. string ,stringBuffer,stringBuilder的区别
  1. String是内容不可变的字符串。底层使用了一个不可变的字符数组(final char[]).
    StringBuffer和StringBuilder 是内容可以改变的字符串。底层使用可变的字符数组(没有使用final修饰).
  2. 拼接字符串不能使用String进行拼接,要使用 StringBuffer或StringBuilder
  3. StringBuilder是线程不安全的,效率较高;
      StringBuffer是线程安全的,效率较低。

6. '==' 和 'equals' 的区别
  '==':判断两个变量之间的值是否相等,基础数据类型变量:直接比较值
  引用类型变量:比较对应的引用内存的首地址
  'equals':比较两个对象长得是否一样,判断两个对象的某些特征是否一样

7. final, finally, finalize的区别:
  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
  内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
  finally是异常处理语句结构的一部分,表示总是执行。
  finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

8. Spring MVC、struts2 区别
  (1).spring mvc 单例 非线程安全
  struts2线程安全对每个请求都产生一个实例
  (2).spring mvc的入口是servlet,而struts2是filter
  spring 的前端总控制器为 DispatcherServlet
  struts2 的前端总控制器为 FilterDispatcher
  (3). 参数传递:struts是在接受参数的时候,
  可以用属性来接受参数,这就说明参数是让多个方法共享的。
  springmvc 用方法来接受参数
  (4).spring mvc是基于方法的设计,而sturts是基于类

9. sleep() 和 wait() 的区别
  sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,
       线程进入就绪状态和其他线程一起竞争cpu的执行时间
  wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,
      使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程

10. volatile与synchronized的区别

  (1)volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;
   synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
  (2)volatile仅能使用在变量级别;
   synchronized则可以使用在变量、方法、和类级别的
  (3)volatile仅能实现变量的修改可见性,不能保证原子性;
   synchronized则可以保证变量的修改可见性和原子性
  (4)volatile不会造成线程的阻塞;
   synchronized可能会造成线程的阻塞。
  (5)volatile标记的变量不会被编译器优化;
   synchronized标记的变量可以被编译器优化

11.return,break,countiue

   break:直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试。他只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出.

   countiue:也是终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行。

   return:结束当前的方法。

猜你喜欢

转载自www.cnblogs.com/huaxiansheng/p/11032966.html
今日推荐