Java面试题收集与研究

本文详细介绍了Java的基本数据类型,解析了final与finally的区别,并对比了String、StringBuilder与StringBuffer的区别,以及Vector、ArrayList与LinkedList的不同之处。
摘要由CSDN通过智能技术生成

1. Java的基本数据类型有哪些?

byte(1),shortint(2),char(2),int(4),float(4),boolean(4),double(8),long(8)

2. 谈谈final,finally有什么不同?

作用不同:

final可以用来修饰类、方法、变量,分别有不同的意义:

  • final修饰类代表该类不可以被继承

  • final修饰方法代表该方法不可以被重写

  • final修饰变量代表该变量的值不可以修改

finally用来保证重点代码一定会被执行的一种机制,值得注意的是:如果try语句中含有return语句,return语句和finally代码块的执行顺序是:先执行return上的表达式,再执行finally代码块,最后才返回,如下所示。

public class FinallyMain {
    public static void main(String[] args) {
       int num = test();
        System.out.println(num);
    }

    private static int test() {
        int num = 10;
        try {
            return num+=20;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println(num);
        }
        return 0;
    }
}

运行结果为

10
30

3. String,StringBuilder,StringBuffer有什么区别?

  • String类是final类,不可被继承,而且String的对象的是不可变,类似字符串拼接、裁剪等动作,都会产生一个 新的String对象
  • StringBuffer类的对象可以当成一个可变的字符串序列,可以解决String拼接、裁剪过程产生过多对象的问题。
    • StringBuffer类的默认初始容量是16 char(16*2字节);
    • StringBuffer类是线程安全的,成员方法都用synchronized修饰;
  • StringBuilder类的作用和StringBuffer类没有本质区别,只是StringBuilder类的方法去掉了synchronized,放弃线程安全,追求更高的执行效率

4. Vector,ArrayList,LinkedList有什么区别?

  • LinkedList

    • 底层基于双向链表实现,由于基于链表实现,所以增删快O(1),查找慢O(n);
    • 由于每个节点都需要保存前后两个节点的引用,所以占用更多的内存空间
  • ArrayList

    • 底层使用数组实现,优缺点是查找快O(1),增删慢O(n)
    • 增删元素会导致后面元素的位置发生变动,这也是ArrayList增删元素效率慢的原因;
    • 对集合元素的操作不是线程安全的;
    • 扩容:newCapacity = oldCapacity + (oldCapacity >> 1),即每次增加旧capacity的0.5倍
  • Vector

    • 底层和ArrayList一样使用数组实现,查找快,增删慢

    • 对集合的操作是线程安全的(正因此效率比ArrayList慢)

    • 扩容:newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity)每次翻倍扩容(若设置了增量因子(capacityIncrement ) ,按增量因子增加)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值