2024年java基础string面试题

java基础string面试题字符串介绍 类是包中的一个类 是我们日常中使用的非常多的一个类 它不是基础数据类型 底层实现是字符数组来实现的 类是由修饰的 所以是无法被继承的 一旦创建了对象 我们就无法改变它的值 因此 它是线程安全的 可以安全地用于多线程环境中 下面我们通过几道面试题来学习类 如何创建一个字符串 一般来说有三种 通过关键字通过构造方法去创建 通过双引号 通过字符串连接符和其余字符串进行拼接创建

大家好,我是讯享网,很高兴认识大家。



字符串介绍

类是包中的一个类,是我们日常中使用的非常多的一个类,它不是基础数据类型,底层实现是字符数组来实现的:

 
讯享网 

类是由修饰的,所以是无法被继承的,一旦创建了对象,我们就无法改变它的值。因此,它是线程安全的,可以安全地用于多线程环境中。

讯享网

下面我们通过几道面试题来学习类

如何创建一个字符串

一般来说有三种:

  • 通过关键字通过构造方法去创建
  • 通过双引号
  • 通过字符串连接符和其余字符串进行拼接创建

说说这几种的区别

  1. 当通过关键字调用无参构造时,仅仅在JVM的堆内存中创建了一个对象
  2. 通过创建对象的时候,如果字符串常量池存在该字符串,直接返回该字符串对象在字符串常量池的地址,否则创建一个新的字符串对象并存储在字符串常量池。

String s = new String("a") 创建了几个对象

当通过关键字传入双引号字符串参数时,会先去把该双引号的字符串放入字符串常量池,然后遇到new以后会在堆中再次创建一个字符串对象,这里是创建了两个对象。

+ 的实现原理

 

借这道面试题来聊一下+的原理,这道题的答案是”nullabc“,也许会有些奇怪,但是当你了解了的原理后也许就不会感到奇怪了,我们使用命令去看一下编译器那里把编译成了什么?

image-20190817165354182

我们在图中被红色框柱的部分可以看出,的执行的过程其实就是先把 转换成了后调用方法完成拼接后再调用方法完成字符串的拼接。所以上面的代码也可以转换为

讯享网

关于StringBuilder和StringBuffer

和 二者都继承了 ,底层都是利用可修改的char数组(JDK 9 以后是 byte数组)。两者的区别是是线程不安全的,而是线程安全的。性能上来说,要高于。

在单线程情况下,如有大量的字符串操作情况,不能使用来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。这时就需要用到我们的。

而在多线程情况下,应当使用来保证线程的安全~

java基础string面试题

判空

在日常的开发中,我们经常会遇到判断字符串是否为空的需求,这里安利几个工具类中的写法:

 

是否相等

关于两个字符串是否相等,我用的最多的是包下的类中的方法 ,实现方法如下:

 

用法也很简单:

 

公众号

小讯
上一篇 2024-12-28 14:51
下一篇 2024-12-26 08:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/56.html