每日三道面试题,通往*的道路2

> 茫茫人海千千万万,感谢这一秒你看到这里。希望我的面试题系列能对你的有所帮助!共勉! > > 愿你在未来的日子,保持热爱,奔赴山海! # 每日三道面试题,成就更好自我 > 欢迎回来,咱们继续昨天的话题吧!昨天讲到了面向对象的特征吧,那接下来我继续提问了! ## 1. 请问:我们是否可以继承 String类? 不可以,在我们查看String源码的时候,可以发现:String类是被final修饰,是不可以被继承的。 ```java public final class String implements java.io.Serializable, Comparable, CharSequence { ..... } ``` 而final有什么作用呢? 1. 修饰类时:表示着该类不能被继承。 2. 修饰方法时:表示方法不能被重写。 3. 修饰变量时:表示变量不能被一次赋值,不能再修改了。 所以String被final修饰的好处有:安全,高效。 并且在当只有字符串不可变的时候,我们才能实现字符串常量池,字符串常量池可以为我们缓存字符串,提高程序的运行效率。 > 可以啊,一问多答,秒啊!既然提到了final这个关键字。那么 ## 2. 我再问下final、finally、finalize这三者有什么区别吗? * final:修饰符(关键字)有三种用法: 1. 如果一个类被声明为 final,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。 2. 将变量声明为 final,可以保证它们在使用中不被改变,被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。 3. 被声明为 final 的方法也同样只能使用,不能在子类中被重写。 * finally: 通常放在try..catch..处理异常中,代表着程序无论正常执行还是发生异常,这里的代码都会执行。 一般是把释放资源的代码放在finally块中。 * finalize: 是Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之 前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的。 > 可以,那再回到String这里, ## 3. 请讲下String和 StringBuilder、StringBuffer之间的区别? 首先String和 StringBuilder、StringBuffer它们都是可以存储和操作字符串的。 * String它是使用final关键字字符数组来保存字符串,所以String对象是不可变的。 * 而StringBuilder和StringBuffer都是继承自AbstractStringBuilder类,这其中也是用字符数组来保 存字符串,但是没有被final修饰,所以是可变的。 * 但是StringBuilder中的方法没有synchronized修饰,所以它的效率会比StringBuffer高。 * 安全方面的话: - String的对象是不可变的,所以它是线程安全的。 - StringBuffer因为对方法加了同步锁,所以也是线程安全,但是StringBuilder没有加同步锁,所以 线程不安全的。 * 性能方面的话: - 每次对String类型进行改变的时候,都会生成一个新的String对象, 然后将指针指向新的String的对象。 - StringBuffer和StringBuilder每次修改,会可以对对象本身进行操作修改,而不是生成新的对象并 改成对象引用。 * 使用场景: * 如果要操作少量的数据用 String 。 * 单线程操作字符串缓冲区下操作大量数据用StringBuilder。 * 多线程操作字符串缓冲区下操作大量数据 用StringBuffer 。 > 小伙子不错嘛!今天就到这里,期待你明天的到来,希望能让我继续保持惊喜! 注: 如果文章有任何错误和建议,请各位大佬尽情留言!如果这篇文章对你也有所帮助,希望可爱亲切的您给个三连关注下,非常感谢啦!也可以微信搜索太子爷哪吒公众号进行私聊我,感谢各位大佬! ![](https://www.icode9.com/i/ll/?i=img_convert/79f89a7d7541a5f8368bb197c69bca31.png)
上一篇:[JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类


下一篇:回顾总结11