欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-09 09:29:43
一、String、StringBuffer、StringBuilder的区别 1、String中由final修饰的字符数组来保存字符串,即private final char value[],所以String不可变。 2、StringBuffer与StringBuilder继承 AbstractSt ......

一、string、stringbuffer、stringbuilder的区别

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

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

 

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

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

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

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

 

  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比较次数,可以提高执行速度。