Java基础--常见笔试、面试问题

2019-05-22 06:36:46来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一、String、StringBuffer、StringBuilder的区别

  1、String中由final修饰的字符数组来保存字符串,即private final char value[],所以String不可变。

 

  2、StringBuffer与StringBuilder继承 AbstractStringBuilder类,且其构造方法中调用AbstractStringBuilder类的构造方法,而AbstractStringBuilder类未使用final修饰字符数组来保存字符串,即char value[], 故StringBuilder与StringBuilder可变。

 

 

  3、线程安全?
    (1)String对象不可变,所以是线程安全的。
    (2)StringBuffer由于方法加入同步锁,所以是线程安全的。
    (3)StringBuilder没有同步锁,所以是线程不安全的。

 

  4、对于String对象,给其赋值分两种情况:
    (1)直接赋值,即String str = "123";时,若常量池中存在"123",则str指向这个字符串,若不存在,则创建一个"123"并置于常量池中,将其引用返回。
    (2)使用new关键字,即String str = new String("123");如果常量池中没有"123",则创建"123"并置于常量池中,然后new关键字会在堆中创建一个String对象,并将堆中的引用返回。

 

  5、使用情况?
    (1)操作少量数据,推荐使用String。
    (2)单线程下操作大量数据,推荐使用StringBuilder。
    (3)多线程下操作大量数据,推荐使用StringBuffer。

 

二、==和equals的区别是什么?

  1、==对于基本类型,比较的是值,对于引用类型,比较的引用变量的堆内存地址。

 

  2、equals未重写时等价于==,一般重写后用来比较两个对象的内容是否相等。

 

三、hashCode() 与 equals() 的关系?

  1、hashcode()的作用用于获取哈希码(散列码),其返回一个int整数,用于确定对象在哈希表中的索引位置。


  2、equals相同的两个对象的hashCode必定相同。


  3、hashCode相同的两个对象的equal不一定相同。


  4、equals重写时,hashcode必须重写。hashcode默认为堆中对象产生的独特值,若未重写hashcode,那么即使两个对象指向同一个数据,hashcode值也不会相等。


  5、hashcode与equals在HashSet中的应用,当对象加入HashSet时,先由hashcode计算对象的散列值,若相等,则比较equals,若equals比较仍相等(即为相同对象),则对象不会加入到HashSet中。若equals比较不等,则将对象重新散列到其他位置。通过减少equals比较次数,可以提高执行速度。


原文链接:https://www.cnblogs.com/l-y-h/p/10902976.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java-过滤器(Filter)

下一篇:linux环境安装Jenkins