你想要的String面试的知识点,这里都有

2021最新Java面试题:String面试题及答案汇总 前言 本题集列举了众多IT公司面试真题,对应聘Java程序员职位的常见考点和知识体系都进行的分类和归纳整理。 本题集适合应聘Java和JavaEE职位的程序员作为面试复习、学习和强化的资料,也适合其他程序员作为拓展读物进行阅读。 本题集包含了常见的算法、面试题,也包含了新的高级技术,比如:微服务架构等技术的面试题目。本题集非常全面,对于工作1-5年左右的java程序员面试有非常好的指导作用。 大家也可以访问(直接在线观看最新版的面试题): Java考试_Java笔试题机试题真题讲解_JavaW.. 阅读详情

引言

Java中的String是每个开发者不得不正视的类。在面试以及开发中总是会出现它潇洒不拘的身影。今天少侠就和大家一起征战String,让它彻底臣服在我们六十米长的大刀下。

面试开始

此时,一个穿着西装的漂亮小姐姐潇洒的进入会议室,看着这么漂亮的技术面试官,你顿时六神无主:难道这就是大厂的工作环境么,这么的美妙,今天一定要好好表现,争取和这么漂亮的小姐姐共事。
在这里插入图片描述
正当你思绪飘到九霄云外时,面试官率先开口打破了沉默。

小伙子,String了解过么?

是Java中的字符串对象,用双引号""表示。

String对象常见的创建方式及区别?

主要有两种:

1. String input="seu";
2. String input=new String("seu");

但这两种有着本质的区别的,第一种直接赋值的方式,String对象虽然不是常量,但可以视为常量,它被放在字符串常量池内。而通过new构造出来的String对象放在堆内存里。

好的,你刚刚提到了字符串的两种创建方式,那么第二种方式创建了几个对象呢?

这要区分情况,以String input=new String("seu")为例,如果字符串常量池已经有"seu"对象,则只会创建一个对象,否则会创建两个对象:即先在堆内存开辟一片区域创建一个新对象"seu",然后将该值复制到字符串常量池中去。如下图所示:
在这里插入图片描述
String input = "seu"创建对象的过程:

  1. 首先在常量池中查找是否存在内容为"abc"字符串对象
  2. 如果不存在则在常量池中创建"abc",并让input引用该对象
  3. 如果存在则直接让input引用该对象

String input = new String(“seu”)创建对象的过程:

  1. 首先在堆中(不是常量池)创建一个指定的对象"seu",并让input引用指向该对象
  2. 在字符串常量池中查看,是否存在内容为"seu"字符串对象
  3. 若存在,则将new出来的字符串对象与字符串常量池中的对象联系起来
  4. 若不存在,则在字符串常量池中创建一个内容为"seu"的字符串对象,并将堆中的对象与之联系起来

String类经常在集合中用作泛型,是因为它的什么特性?

不可变性。来,给国师上源码:

private final char value[];

可以看到,String类的底层使用的是一个名为value的字符数组来存储。

  • 这个数组使用private修饰===>不能被外部访问
  • 使用final修饰===>它的地址不能改变
  • 使用数组[]存储===>长度是固定的

那你知道为什么Java中的String要设计成不可变对象么?

一听到这个问题,是不是有点紧张,但是千万不要慌,在美女小姐姐面前一定要保持淡定。定下心稍作思考后回答道:因为不可变保证了安全性,这个安全性体现在两个方面:一是多线程条件下的安全性;二是JVM启动时的安全性,因为JVM启动时要用到字符串,不可变对象保证了类加载时的正确性。

此时面试官露出了微笑,心想这个小伙子有点内涵,于是接着问道:String,StingBuffer,StringBuilder的区别?

这是String类的经典面试题了,于是你缓缓答到,主要区别有:
String:不可变字符串;
StringBuffer:可变字符串、线程安全(通过synchronized实现)、效率低;
StringBuilder:可变字符串、线程不安全、效率高。

面试此时已经有点被你英俊潇洒的回答迷住了,小伙子很优秀,那你阅读过String的源码吗?

没有(要是真这么回答,恐怕面试官要给你素质三连,麻烦你把门从外面带上了)。肯定要回答有啦,要是真没有,就在阅读这篇博客的时候开始看起来。这里少侠给大家整理几个常用的:

String中的方法描述
length返回字符串的长度
equals判断两个字符串是否相等
trim去除字符串两边的空格
substring字符串截取
concat字符串拼接,注意效率比"+"要高
indexOf某个对象在字符串中第一次出现的索引位置
replace将字符串中原值替换成指定的值
split字符串分割

好的,小伙子,那你能说说如何判断一个字符串中某个字符出现的次数吗?

乍一听,你可能有点懵,你第一时间想到的肯定是把字符串转换为字符数组,然后循环遍历了,但是想想刚刚的问题啊,都提到字符串源码了,这里肯定要用源码里的方法,正好秀一秀对源码的熟练度啊。
这里你稳若泰山的给出方案:有两种方案,一是使用replace()方法,将字符串中该字符全部替换成空串,然后计算前后字符串的长度差,即为所求;二是使用split()方法,将原字符串按照给定字符分割,该字符出现的次数就是分割后数字的长度减去1。
这里贴心的少侠还为大家准备了一个小栗子和实现代码啦:

/**
 * @author Carson Chu, 1965704869@qq.com
 * @date 2020/4/6 20:41
 * @description
 */
public class Main {
    public static void main(String[] args) {
        String input = "SEUMECarson";
        String searchObj = "E";
        int count = 0;
        //count = statisticAmount0(input, searchObj);
        count = statisticAmount1(input, searchObj);
        System.out.println("字符" + searchObj + "出现的次数为:" + count);
    }

    /**
     * @description 用replace()方法实现
     * @params [input, searchObj]
     * @returns void
     */
    private static int statisticAmount0(String input, String searchObj) {
        int count = 0;

        int originalLength = input.length();
        input = input.replace(searchObj, "");
        int newLength = input.length();
        System.out.println("字符" + searchObj + "出现的次数为:" + count);
        return originalLength - newLength;
    }

    /**
     * @description 用split()方法实现
     * @params [input, searchObj]
     * @returns void
     */
    private static int statisticAmount1(String input, String searchObj) {
        String[] strings = input.split(searchObj);

        return strings.length - 1;
    }
}

很好,此时面试官已经在内心为你比起了大拇指,小伙子果然有内涵,是我的菜。但是还没结束,说说如何反转一个字符串?

这时候你先答道,用StringBuilder 和StringBuffer的reverse()方法然后再调用toString()方法均可实现。同时,也能利用栈的FILO特性实现。

public class Main {
    public static void main(String[] args) {
        String input = "SEUMECarson";
        char[] charArray = input.toCharArray();
        Stack<Character> stack = new Stack<>();
        StringBuilder newStr = new StringBuilder();

        for (char item : charArray) {
            stack.push(item);
        }

        for (int i = 0; i < charArray.length; i++) {
            newStr.append(stack.pop());
        }

        System.out.println("反转前:" + input);
        System.out.println("反转后:" + newStr.toString());
    }
}

面试结束

面试官对你大为赞赏,拉着你又单独私聊了很久,希望你能早日加入部门,临走前还不忘给你个回眸一笑。
在这里插入图片描述
开个玩笑哈,希望无论是学习还是工作,少侠都能为大家的编程之路带来一些欢乐。

点点关注,不会迷路

Java面试知识点(三十四)string、stringbuilder和stringbuffer 这三个类的主要区别在两个方面:运算速度(运算性能或执行效率)和线程安全性。 1、运算速度比较(通常情况下):StringBuilder > StringBuffer > String String 是 final 类不能被继承且为字符串常量,而 StringBuilder 和 StringBuffer 均为字符串变量。String 对象一旦创建便不可更改,而后两者是可更改的,它们只能通... 阅读详情

相关推荐

最全Java面试知识点梳理

1. 前言 最近面试了几家公司,体验了一下电话面试和今年刚火起来的视频面试, 虽然之前就有一些公司会先通过电话面试的形式先评估下候选人的能力水平,但好像不多,至少我以前的面试形式100%都是现场面试。 面试过程中,不可避免的被问到了很多面试题,本篇博客就总结下面试过程中被问到的关于String的2道面试题,分别是: 如何判断一个字符串中某个字符出现的次数? 如何反转一个字符串? 其余的面试题,目前都已梳理出来,后续会以博客的形式进行分享。 Java核心架构笔记大致如下 0~1年: Java基础(基本语

m0_56675572的博客 1927

字符串(面试)

最近看书看不下去就刷面试题,决定把字符串有关面试题都写这个文章里1.实现一个函数在字符串中把空格替换成”%20” 注意是否会发生内存溢出#include <iostream> #include <cstring>using namespace std; void changeZi(char** buff, int size) { int num = 0;//多少个空格 char*

hello_bravo_的博客 706

面试必考之Java中String是基础类型?是包装类型?

面试必考之Java中String是基础类型?是包装类型?为什么

老王随聊 2892

面试官竟然这样对我!由String,String Builder,String Buffer 引起的面试惨案

前言 String,StringBuilder,StringBuffer的区别是啥?这个面试题估计每个JAVA都应该碰到过吧。依稀记得第一次面试的时候,面试官问我这个问题时,心想着能有啥区别不都是拼接字符串嘛。深入了解这个问题后,发现并不简单? 前戏 面:面试官 应:应聘者 面:你好,你是不一样的科技宅是吧? 应:面试官你好,我是不一样的科技宅。 面:你好,麻烦做一个简单的自我介绍吧。 应:我叫不一样的科技宅,来自xxx,做过的项目主要有xxxx用到xxx,xxx技术。 面:好的,对你的的履历有些基本了

豆汁 6307

power bi 演唱会-佐罗

我是业务分析人员,注重使用性,因此,课程不到 30% 的内容就可以解决目前为止我碰到的所有业务问题,剩下的 70% 内容是帮助我提升,优化,升华,精益求精用的,比如第三方工具,比如代码运行速度优化,比如查询逻辑优化等等。系统性上来说,结构明晰,安排上非常有条理,层层递进;《BI 真经》,中有真经二字,略显夸大,而当我第一次证明了这点的时候,我也非常惊讶,这就是我做以下所有事情的一切动力。《BI 真经》综合考量思想性,系统性,本质性,创新性,通用性,技巧性,启发性,对比其他课程有压倒性的显著优势。

v_1090213742的博客 911

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 308

关于String面试中的知识点

StringString面试题与知识点不可变类如何实现一个不变类String 在内存中的操作==和.equals 与hashcodeString的intern()方法 String面试题与知识点 1.本篇文章主要讲解关于string的知识点,通过部分的面试题来展示具体的String考点,也是对自己最近学习的一个总结。 不可变类 String 是不可变类,一个对象被创建出来,它的值就不变了 看下面的代码 public class Test { public static void main(String[]

weixin_43950187的博客 180

CXL Virtual Hierarchy (VH) Enumeration理解

在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。

Summer的博客 1002

【面试】Java后台面试基础知识点总结

Java基础知识点复习与总结 文章目录Java基础知识点复习与总结1. Java 基本数据类型1.1 自动类型转换1.2 自动装箱和自动拆箱1.3 int 和 和 Integer 有什么区别?1.4 String、StringBuffer、StringBuilder的区别:2. Java 修饰符2.1 访问修饰符2.2 非访问修饰符2.3 Java变量3. Java 继承3.1 方法重载和方法重写...

Newtol的博客 5113

[pcie]gen6 下 L0p

000b~100b: 触发L0p 操作流程协商工作link width 到target link width.为111b:link width 硬件动态调整。硬件动态:Device control 3 register.target link width=111b当pcie链路检测到空闲状态时,设备可以主动进入L0p状态。L0p 是pcie gen6 新引入的链路状态,是L0的子状态。(5)LINK WIDTH:当LINK WIDTH CHANGE.cmd为Request时表示请求的链路宽度。

BIG_APPLE1的博客 1676

RenderDoc实战:5分钟搞定安卓Vulkan应用抓帧(含常见连接失败排查)

本文详细介绍了如何使用RenderDoc工具对安卓Vulkan应用进行抓帧分析,包括环境配置、完整抓帧流程及常见连接问题的解决方案。通过实战案例和高级技巧,帮助开发者快速定位渲染问题和性能瓶颈,提升移动图形开发效率。

weixin_28318011的博客 282

String不可变性的底层秘密:Java面试必考知识点深度剖析

String不可变性├─ 实现方式│ ├─ final类│ ├─ 私有final数组│ └─ 无修改方法├─ 设计原因│ ├─ 安全性│ ├─ 性能优化│ ├─ 线程安全│ └─ 常量池基础├─ 相关机制│ ├─ 字符串常量池│ ├─ 哈希码缓存│ └─ 享元模式└─ 注意事项├─ 反射风险├─ 内存泄漏└─ 正则表达式应用。

indiazone的博客 1503

【YoloV11改进策略】基于流形约束超连接(mHC)增强YoloV11全局特征提取能力|独家复现|梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1349

一次关于String,String Builder,String Buffer 的面试经历,面试套路深回答需谨慎

前言: String,StringBuilder,StringBuffer的区别是啥?这个面试题估计每个程序员都应该碰到过吧。依稀记得第一次面试的时候,面试官问我这个问题时,心想着这不是很简单吗。深入了解这个问题后,发现这里面并不简单,面试官的套路还是深啊! 面试官:String,StringBuilder,StringBuffer的区别是啥? 从可变性来讲String的是不可变的,StringBuilder,StringBuffer的长度是可变的。 从运行速度上来讲StringBuilder &g

qq_50524970的博客 1万+

Unity音游开发全指南:模板与免费资源高效构建节奏游戏

**粒子特效** | [Universal VFX](https://assetstore.unity.com/packages/vfx/particles/universal-vfx-159182) | 免费视觉特效 || **UI素材** | [Game UI Pack](https://assetstore.unity.com/packages/2d/gui/game-ui-pack-86908) | 现代风格UI元素 |**音游开发的黄金法则**:完美的节奏游戏是音乐与游戏的和谐统一。

Loving_enjoy的博客 728

【银河麒麟V10】【桌面】【服务器】系统启动问题

1、如果之前运行好好的,重启后系统报错,一般80%是因为fstab的问题,回想下之前有没有添加过外接存储,修改过/etc/fstab,如果是的话一般是因为存储异常(比如网络存储无法连接,本地存储路径变化)导致系统开机自检失败,导致无法正常启动; 处理方式:进入单用户(单用户进入的几种方式上面有专门文章介绍),修改/etc/fstab,将新增的内容暂时注释掉,然后重启系统,能正常进入系统后再分析失败原因。 ...

桂安俊@KylinOS 3万+

String面试知识点总结

String三大核心机制 不变性:是一个immutable模式的对象,不变模式的主要作用是当一个对象需要被多线程共享并频繁访问时,可以保证数据的一致性 常量池优化:String对象创建后,会在字符串常量池进行缓存,下次创建同样的对象时,会直接返回缓存的引用 final:String类不可继承,提高了系统的安全性 常见的考点 String类型不是基本数据类型,String底层实现为char类型的...

芊雨的博客 232

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

这10道最经典的string面试题,你一定在面试中碰到过!

前言 string是C++、java,VB等编程语言中的[字符串],字符串是一个特殊的对象,属于引用类型。 在java中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类对象!同时string在互联网大厂面试的时候也是一个常问的技术点,下面为大家整理了10道最经典的string面试题,相信大家在面试中一定碰到过! 1、String 是基本数据类

欢迎您访问我的公众号【前程有光】 622

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java面试常见知识点总结

总结Java面试相关知识点,以便后续查看,持续补充

m0_45303174的博客 6230

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

86面试常问:五个刁钻的String面试问题及解答

这篇来看看关于Java String类的5道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,学完了这篇,我才焕然大悟,才知道为什么是这个答案,本篇就带你了解这些题的答案为什么是这样。 1.判定定义为String类型的st1和st2是否相等,为什么 packagestring; publicclassDemo2_String{ publicstaticvoidmain(String[]args){ Stringst1="abc"; S...

AI乔治 598

String的面试知识点

String的变化历程 在java6之前,String对象主要有四个成员变量:char[]数组,offset偏移量,count字符数量,hash哈希值;通过offset和count两个属性可以定位char[]数组,共享数组对象,但是有可能会导致内存泄露。占用空间不被释放,比如源字符串很大,subString()一个字符,然后i只调用分割后的,那麽就会会共享原String对象,不会被GC,造成内存泄露。 泄露:调用String对象的substring方法后指向的对象地址并没有发生改变,只是改变的是偏移量,这样

code_mzh的博客 301

2022GitHub最热门的Java面试真题&高频知识点汇总

前言 这是我在工作、面试中学习并总结到的一些知识点,都是一些比较典型的、面试常常被问到的问题。 全部笔记内容和答案解析都整理成文档了(在文末) 如果你平时没有注意去总结的话,那么当你面试被问到的时候可能会是一脸懵圈,就算这个问题你知道怎么回事,但是你平时没有认真总结,你也可能会出现逻辑混乱的情况,从而错失工作机会。 有些知识点不经常使用就会忘记,但是面试还会问,对此,我也是深受其害,所以我决定将这些遇见的问题整理下来,分享出去,帮助更多的人,我们共同进步。 JDK、JRE、JVM之间的区别 JDK(Ja

QLCZ0809的博客 7563

String类常见面试题

1.判断定义为String类型的s1和s2是否相等? 答案解释:String类代表字符串,字符串是常量,常量需要进入到内存中的方法区的常量池(进入常量池规则:如果常量池中没有这个常量,就创建一个,如果有就不再创建了)。所以s1首先会在常量池中创建“abc”对象,“abc”对象是有地址值的,“abc”对象将地址值赋给s1。当s2的时候,此时常量池中已经存在了“abc对象”,所以就不需要再创建了...

汐小旅Shiory 8081

Java面试知识点

Java基础的面试知识

weixin_43241706的博客 6732

JavaScript面试大师_String类型

《JavaScript面试大师》系列文章的核心在于沿用应试教育的套路,采取:知识点+刷题的模式来加深巩固理解,目的在于斩获心仪offer,更高的目的在于提升对语言本身的理解,达到融会贯通。 String面试题: 基本类型(primitive)和基本包类型(primitive wrapper)的区别 基本类型没有自己的方法,为什么基本类型Boolean、Number和String能调用方法 将值转成字符串的方法 说说对toString()的理解 说说对String()的理解 面试题1:基.

wuxeek的博客 154

String面试总结

前端时间笔者去腾讯面试,面试官给的第一道题就是String各种操作的问题,虽然之前看过这些知识,当时笔者一时也没想起来,好记性不如烂笔头呀,这里做下笔记,以防下次再问。 一、无‘+’操作符时的比较 //代码1 String s1 =newString("Helloworld"); Strings2 =newString("Helloworld");...

pocher的博客 751
上一篇: Java并发编程(三):CountDownLatch(闭锁)原理及利用闭锁实现两个线程分别输出100以内的奇数和偶数
下一篇: 【Java集合】系列一:详解ArrayList的底层原理(本篇源码基于Java11)
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值