当前位置: 首页 > news >正文

java8基础知识--字符串

Java 字符串(String)核心知识点总结(JDK8)

一、String 基础特性

  1. String 是 final 类:不可被继承,底层由final char[]存储(JDK9 改为 byte[])。
  2. 不可变性:字符串一旦创建,内容无法修改
    • 所有修改操作(截取、替换、拼接)都会返回新字符串
    • 好处:线程安全、常量池复用、哈希值固定。

二、字符串常量池(String Pool)

  1. 位置:JDK8 中位于堆内存中。
  2. 作用:缓存字符串字面量,实现对象复用,节省内存。
  3. 核心规则
    • 相同内容的字符串,常量池中只存一份
    • 使用字面量创建的字符串,自动进入常量池。

三、三种创建方式的内存区别

1. 字面量创建(推荐)

Strings="hello";
  • 先查常量池,存在直接复用,不存在则创建。
  • 只在常量池创建 1 个对象

2. new String 创建

Strings=newString("hello");
  1. 常量池中创建/复用"hello"
  2. 堆中创建新的 String 对象。
  • 共创建 2 个对象(堆1个 + 常量池1个)。

3. 字符串拼接

  1. 常量 + 常量"a" + "b"
    编译期直接优化为"ab",存入常量池。
  2. 变量 + 变量/常量a + b
    底层优化为:
    newStringBuilder().append(a).append(b).toString()
    最终在堆中创建新对象不进入常量池

四、intern() 方法详解

1. 作用

手动将字符串加入常量池,并返回常量池中的对象引用

2. 执行逻辑

  1. 去常量池查找相同内容的字符串。
  2. 存在 →直接返回常量池对象
  3. 不存在 →将当前对象的引用存入常量池,再返回。

3. 关键点

  • 不会删除/移动原堆对象
  • 原对象无引用时,由 GC 自动回收。
  • 目的:实现字符串复用,节省内存,可用==快速比较。

五、== 和 equals() 区别

  1. ==
    • 基本类型:比较值。
    • 引用类型(String):比较内存地址
  2. equals()
    • String 重写了该方法,比较字符串内容
  • 开发规范:字符串比较必须用 equals()(常量池复用可用==,但不推荐)。

六、经典内存面试题

题1

Strings1="abc";Strings2="abc";// s1 == s2 → true(常量池复用同一对象)

题2

Strings1=newString("abc");Strings2=newString("abc");// s1 == s2 → false(两个不同堆对象)

题3

Strings1="ab";Strings2="a"+"b";Strings3=s1+"b";// s1 == s2 → true(编译优化)// s1 == s3 → false(s3 在堆中)

题4

Strings1=newString("hello");Strings2=s1.intern();Strings3="hello";// s1 == s2 → false// s2 == s3 → true

七、核心总结(必背)

  1. String 不可变,修改返回新对象。
  2. 字面量存常量池,new String()存堆内存。
  3. 变量拼接底层用StringBuilder,结果在堆。
  4. intern()手动入池,返回常量池对象,不删除原对象。
  5. 字符串比较用equals(),地址比较用==
http://www.jsqmd.com/news/574988/

相关文章:

  • 万象视界灵坛实操手册:自定义神谕标签集构建行业专属语义词典
  • Windows 11安装难题终极解决方案:3分钟轻松绕过TPM限制的完整指南
  • 如何用智能抢票脚本高效获取热门演出门票?零基础也能30分钟上手
  • 手机突然变砖?3步拯救你的微信聊天记录,WeChatExporter让数据安全感爆棚
  • 突破C盘空间瓶颈:5大维度释放Windows系统潜能
  • Windows驱动管理解决方案:DriverStore Explorer效率指南
  • Python小说下载器实战:从单源爬取到多线程下载的完整实现
  • 别再手动降噪了!用Python的noisereduce库,5分钟搞定你的会议录音和播客音频
  • 手机上看的网页,怎样自动在荣耀 MagicOS 10 平板上接着打开?
  • 全面掌握MelonLoader:Unity游戏模组开发的终极指南
  • OpenClaw儿童教育:Qwen3.5-9B-AWQ-4bit自动生成绘本讲解
  • AI学伴助力:用自然语言对话快速掌握数据库系统精髓
  • 为什么你的Spring Boot项目还没启用记录模式?3个致命兼容风险+2步平滑迁移方案
  • 尿酸高怎么快速且安全地降下来?2026年七大降尿酸方案速效与维稳深度对比,带你认清科学止痛风的底层逻辑 - 企业推荐官【官方】
  • AI辅助开发:探索快马AI如何智能分析与处理17.100.c.cm类网络标识数据
  • 软件测试:白盒测试详解
  • 交流微电网架构设计:拓扑结构、核心组件与适配场景
  • PyTorch 2.8 镜像实战:基于卷积神经网络的图像分类项目从零开始
  • 【AI 工程师的 GPU 入门课】02 内存金字塔:HBM、SRAM 与不可逾越的“内存墙”
  • ChatGLM3-6B效果实测:万字长文处理能力,告别“聊两句就忘”
  • Video DownloadHelper伴侣应用:解锁浏览器视频下载的终极解决方案
  • 滚动轴承动力学模型:附上自研程序与网上paper
  • 5分钟集成Vue+WPS在线文档预览:零成本解决企业Office文档查看难题
  • 2026合金管道公司口碑推荐,这些工厂预制化管道值得选,工厂预制化管道/保温管道/管件,工厂预制化管道实力厂家推荐 - 品牌推荐师
  • Phi-4-mini-reasoning Qt桌面应用开发:集成AI模型的跨平台GUI程序
  • 精品52页PPT | 智慧园区安全生产顶层设计方案
  • 职场人必备:WPS AI轻松生成带圈、罗马、大写金额等10种序号
  • 【05-log-+-diff:看懂你改了什么、历史是什么】
  • 买货架怎么选才不踩坑?注意哪些参数? - 企业推荐官【官方】
  • 3步精通Jable视频下载工具:从安装到高效使用的完整指南