共计 1584 个字符,预计需要花费 4 分钟才能阅读完成。
茫茫人海千千万万,感激这一秒你看到这里。心愿我的面试题系列能对你的有所帮忙!共勉!
愿你在将来的日子,放弃酷爱,奔赴山海!
每日三道面试题,成就更好自我
欢送回来,咱们持续昨天的话题吧!昨天讲到了面向对象的特色吧,那接下来我持续发问了!
1. 请问:咱们是否能够继承 String 类?
不能够,在咱们查看 String 源码的时候,能够发现:String 类是被 final 润饰,是不能够被继承的。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {.....}
而 final 有什么作用呢?
- 润饰类时:示意着该类不能被继承。
- 润饰办法时:示意办法不能被重写。
- 润饰变量时:示意变量不能被一次赋值,不能再批改了。
所以 String 被 final 润饰的益处有:平安,高效。并且在当只有字符串不可变的时候,咱们能力实现字符串常量池,字符串常量池能够为咱们缓存字符串,进步程序的运行效率。
能够啊,一问多答,秒啊!既然提到了 final 这个关键字。那么
2. 我再问下 final、finally、finalize 这三者有什么区别吗?
-
final:修饰符(关键字)有三种用法:
- 如果一个类被申明为 final,意味着它不能再派生出新的子类,即不能被继承,因而它和 abstract 是反义词。
- 将变量申明为 final,能够保障它们在应用中不被扭转,被申明为 final 的变量必须在申明时给定初值,而在当前的援用中只能读取不可批改。
- 被申明为 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。
小伙子不错嘛!明天就到这里,期待你今天的到来,心愿能让我持续放弃惊喜!
注: 如果文章有任何谬误和倡议,请各位大佬纵情留言!如果这篇文章对你也有所帮忙,心愿可恶亲切的您给个三连关注下,非常感谢啦!也能够微信搜寻太子爷哪吒公众号进行私聊我,感激各位大佬!
正文完