整理好了!2024年最常见 100 道 Java基础面试题(二十八)

上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(二十七)-CSDN博客

五十五、String 真的是不可变的吗?

在Java中,String 类的对象确实是不可变的(Immutable)。这意味着一旦一个 String 对象被创建,它所包含的字符序列就不能被改变。这个特性是 String 类设计的核心部分,并且是由以下几个方面保证的:

  1. 声明为 final:在 String 类的内部实现中,存储字符串字符的数组被声明为 private final,这意味着一旦数组被初始化,它就不能被重新赋值。

  2. 没有修改方法String 类没有提供任何修改其字符序列的方法。所有看似修改 String 对象的方法,如 replace()substring()concat(),实际上都会返回一个新的 String 对象。

  3. 不可变的实现String 类的实现确保了它的不可变性。例如,即使是 StringBufferStringBuilder 这样的可变字符串类,当它们内部的字符串被转换为 String 对象时,也会创建一个新的不可变字符串。

示例

String str = "Hello";
str = str + " World!";

在这个示例中,尽管看起来 str 被修改了,但实际上发生了以下步骤:

  1. 创建了一个新的字符串对象 " World!"
  2. 将 "Hello" 和 " World!" 连接,生成了一个新的字符串对象 "Hello World!"
  3. str 引用指向了这个新的字符串对象。

原来的 "Hello" 对象仍然存在于字符串常量池中,没有被修改。

注意事项

  • 由于 String 的不可变性,频繁地修改字符串(如在循环中拼接字符串)会导致创建多个临时 String 对象,这可能会对性能产生负面影响。
  • 在处理字符串的修改操作时,推荐使用 StringBuilder 或 StringBuffer,这些类提供了可变的字符串对象,适合于频繁修改的场景。

总结

String 类的对象在Java中是不可变的,这是由其内部实现和设计哲学决定的。不可变性为 String 类带来了线程安全性、性能优势和简化的编程模型。理解 String 的不可变性对于编写高效的字符串处理程序和利用Java的字符串常量池非常重要。

五十六、String 字符串如何进行反转?

在Java中,反转一个String字符串可以通过多种方式实现,下面是几种常见的方法:

使用StringBuilder类的reverse()方法

这是最简单直接的方法,StringBuilder类提供了一个reverse()方法,用于反转字符串。

String original = "Hello, World!";
String reversed = new StringBuilder(original).reverse().toString();
System.out.println(reversed); // 输出: "!dlroW ,olleH"

使用字符串连接

通过使用字符串连接操作,可以逐个字符地构建反转后的字符串。

String original = "Hello, World!";
String reversed = "";
for (int i = original.length() - 1; i >= 0; i--) {reversed += original.charAt(i);
}
System.out.println(reversed);

使用Stack

可以使用Stack数据结构来反转字符串,Stack类提供了pushpop方法,可以用来反转字符串。

String original = "Hello, World!";
Stack<Character> stack = new Stack<>();
for (int i = 0; i < original.length(); i++) {stack.push(original.charAt(i));
}String reversed = "";
while (!stack.isEmpty()) {reversed += stack.pop();
}
System.out.println(reversed);

使用递归

递归方法也可以用于反转字符串,尽管这不是一个实用的方法,但它展示了递归的概念。

public class StringReverse {public static String reverse(String str, int index) {if (index < str.length()) {return str.charAt(index) + reverse(str, index + 1);} else {return "";}}public static void main(String[] args) {String original = "Hello, World!";String reversed = reverse(original, 0);System.out.println(reversed);}
}

使用String类的连接

String类是不可变的,这意味着每次修改操作都会创建一个新的String对象。可以通过连接操作来反转字符串,但这在性能上不如使用StringBuilder

String original = "Hello, World!";
String reversed = "";
for (int i = original.length() - 1; i >= 0; i--) {reversed = original.charAt(i) + reversed;
}
System.out.println(reversed);

总结

使用StringBuilderreverse()方法是最简单且高效的方法来反转字符串。其他方法虽然也能实现字符串反转,但可能在性能上不如StringBuilder。在选择方法时,需要根据具体情况和性能要求来决定使用哪种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Pytorch深度学习——GPU安装/使用

本文章来源于对李沐动手深度学习代码以及原理的理解&#xff0c;并且由于李沐老师的代码能力很强&#xff0c;以及视频中讲解代码的部分较少&#xff0c;所以这里将代码进行尽量逐行详细解释 并且由于pytorch的语法有些小伙伴可能并不熟悉&#xff0c;所以我们会采用逐行解释小…

《QT实用小工具·四十九》QT开发的轮播图

1、概述 源码放在文章末尾 该项目实现了界面轮播图的效果&#xff0c;包含如下特点&#xff1a; 左右轮播 鼠标悬浮切换&#xff0c;无需点击 自动定时轮播 自动裁剪和缩放不同尺寸图片 任意添加、插入、删除 单击事件&#xff0c;支持索引和自定义文本 界面美观&#xff0c;圆…

开源免费的网盘项目Cloudreve,基于Go云存储个人网盘系统源码(七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDrive)

项目简介&#xff1a; 在现今的网盘服务中&#xff0c;用户经常遭遇限速和价格上涨的问题&#xff0c;这无疑增加了使用上的困扰。 为此&#xff0c;我今天要介绍一款开源且免费的网盘项目——Cloudreve。 这个项目是基于Go语言开发的云存储个人网盘系统&#xff0c;支持多种…

[笔试训练](十二)

目录 034:删除公共字符串 035:两个链表的第一个公共节点 036:mari和shiny 034:删除公共字符串 删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题解: 用哈希记录好第二个字符串中的字符&#xff0c;再遍历一遍第一个字符串&#xff0c;只将没有记录的字符加在结果字符串上。…

[C++][数据结构]哈希1:哈希函数的介绍与线性探测的实现

前言 学完了二叉树&#xff0c;我们要学当前阶段数据结构的最后一个内容了&#xff1a;哈希&#xff01;&#xff01; 引入 先来介绍两个用哈希封装的两个容器&#xff1a;unordered_map unordered_set 与map和set的不同&#xff1a; map/set是双向迭代器&#xff0c;而另…

【已解决】VSCode 连接远程 Ubuntu :检测到 #include 错误。请更新 includePath。

文章目录 1. 环境声明2. 解决过程 1. 环境声明 即使是同一个报错&#xff0c;在不同的环境中&#xff0c;报错原因、解决方法都是不同的&#xff0c;本文只能解决跟我类似的问题&#xff0c;如果你发现你跟我遇到的问题不太一样&#xff0c;建议寻找其他解法。 必须要吐槽的是…

STD10A230XCB电源模块STD05A230XCB整流模块介绍

STD10A230XCB电源模块STD05A230XCB整流模块介绍&#xff0c;直流屏电源模块STD05A230XCB&#xff0c;整流模块STD10A115XCB&#xff0c;STD20A115XCB&#xff0c;STD10A230X&#xff0c;STD05A230X&#xff0c;直流屏充电模块的关键词: 电力智能高频开关充电模块STD20A230XCB,高…

【科研技术】华为为什么不给微信特权?

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(4)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;4&#xff09; 一、hystrix&#xff1a;使用 turbine 聚合所有的 hytrix 的监控数据测试。创建父工程 spring_cloud_hystrix_demo&#xff0c;导入相关依赖坐标。并在父工程 spring_cloud_…

C语言/数据结构——每日一题(移除链表元素)

一.前言 今天在leetcode刷到了一道关于单链表的题。想着和大家分享一下。废话不多说&#xff0c;让我们开始今天的知识分享吧。 二.正文 1.1题目要求 1.2思路剖析 我们可以创建一个新的单链表&#xff0c;然后通过对原单链表的遍历&#xff0c;将数据不等于val的节点移到新…

图床搭建GitHub+PicGo+jsdelivr(CDN)+Typora(内附加速工具)

目录 安装PicGo GitHub配置与加速器 配置PicGo 使用typroa 安装PicGo PicGo是一个用于上传图片的客户端&#xff0c;支持拖拽上传、剪贴板上传&#xff0c;功能十分方便。 下载地址&#xff1a; https://github.com/Molunerfinn/PicGo/releases 个人网盘自取版本2.4.0…

了解并学会使用反射

目录 一、反射的应用场景&#xff08;简单了解&#xff09; 二、反射的定义 三、关于反射的四个重要的类 四、反射的使用 1.Class获取一个class对象的方式 方式一&#xff1a;forName&#xff08;&#xff09;&#xff1a; 方式二&#xff1a;封装类.Class&#xff1a; …

【stomp 实战】Spring websocket 用户订阅和会话的管理源码分析

通过Spring websocket 用户校验和业务会话绑定我们学会了如何将业务会话绑定到spring websocket会话上。通过这一节&#xff0c;我们来分析一下会话和订阅的实现 用户会话的数据结构 SessionInfo 用户会话 用户会话定义如下&#xff1a; private static final class Sessio…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

VMware虚拟机中ubuntu使用记录(4)—— 如何在VMware虚拟机中调用本机电脑的摄像头

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、虚拟机调用本机摄像头(1) 启动VMware USB 服务(2) 连接本机摄像头(3) 测试摄像头的连接 前言 通过配置虚拟机调用本机摄像头&#xff0c;用户可以在虚拟机…

Redis---------实现商品秒杀业务,包括唯一ID,超卖问题,分布式锁

订单ID必须是唯一 唯一ID构成&#xff1a; 代码生成唯一ID&#xff1a; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.tim…

【论文阅读】Learning Texture Transformer Network for Image Super-Resolution

Learning Texture Transformer Network for Image Super-Resolution 论文地址Abstract1. 简介2.相关工作2.1单图像超分辨率2.2 Reference-based Image Super-Resolution 3. 方法3.1. Texture TransformerLearnable Texture Extractor 可学习的纹理提取器。Relevance Embedding.…

Qt QImageWriter类介绍

1.简介 QImageWriter 用于写入图像文件的类。它提供了将 QImage 对象保存到不同图像格式文件的功能&#xff0c;包括但不限于 PNG、JPEG、BMP 等。QImageWriter 可以将图像写入文件&#xff0c;也可以写入任何 QIODevice&#xff0c;如 QByteArray&#xff0c;这使得它非常灵活…

python中type,object,class 三者关系

type,object,class 三者关系 在python中&#xff0c;所有类的创建关系遵循&#xff1a; type -> int -> 1 type -> class -> obj例如&#xff1a; a 1 b "abc" print(type(1)) # <class int> 返回对象的类型 print(type(int)) …

基于OpenCv的图像金字塔

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…