• 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:结束当前的方法。

  • 相关阅读:
    使用UIImagePickerController时3DTouch引起的Crash问题的解决--备用
    阿帕奇证书配置
    终端编写c程序
    native2ascii 在 Mac终端的转码
    mac 下 配置 阿帕奇
    苹果电脑的坑
    iOS证书快要过期怎么办?
    An unspecified error occurred!
    一个苹果证书怎么多次使用
    多媒体开发之---live555的多线程支持,原本只是单线程,单通道
  • 原文地址:https://www.cnblogs.com/huaxiansheng/p/11032966.html
Copyright © 2020-2023  润新知