新闻详情

新闻详情

首页 / 资讯中心 / 详情

String s1 = new String(“abc“); 这个s1称为什么,存储在什么位置?

发布时间:2026/11/6 22:41:00来源:尧图网络
String s1 = new String(“abc“); 这个s1称为什么,存储在什么位置?
1.s1是什么s1是一个引用变量Reference Variable它的类型是String。变量它是一个存储在 ** 栈Stack** 上的内存位置用于存放数据。引用它存放的数据不是abc这个字符串本身而是这个字符串对象在 ** 堆Heap** 内存中的地址或者叫 “引用”。你可以把s1想象成一个指针或一个门牌号它指向了堆内存中abc这个字符串对象的实际位置。2. 各部分存储在哪里这行代码执行时会在内存中创建两个东西在特定情况下可能是一个后面会解释abc字符串对象它存储在 ** 堆Heap** 内存中。更具体地说从 Java 7 开始它存储在 ** 堆中的字符串常量池String Constant Pool** 里。在 Java 6 及之前字符串常量池是在方法区Method Area中的。s1引用变量它存储在 ** 栈Stack** 内存中。如果这行代码是在一个方法比如main方法内部声明的那么s1就存储在该方法对应的栈帧Stack Frame中。s1的值是一个内存地址这个地址指向堆中abc对象的起始位置。图示plaintext栈 (Stack) 堆 (Heap) ------- ------- | s1 | ----- 地址: 0x123 | abc | ------- ------- ^ | (字符串常量池中的对象)3. 一个重要的细节new String(abc)到底创建了几个对象这是一个经典的面试题。答案是可能创建一个或两个对象。情况一创建两个对象。当 JVM 第一次遇到abc这个字符串字面量时它会在字符串常量池中创建一个新的String对象abc。然后new String(abc)这个表达式会在堆内存中创建一个新的、独立的String对象。这个新对象的内容是abc它的值是从常量池中的那个对象复制过来的。最终s1引用指向的是堆中这个新创建的对象。情况二只创建一个对象。如果 JVM 在执行这行代码之前已经因为其他代码比如String s abc;在字符串常量池中创建过了abc对象。那么new String(abc)只会在堆内存中创建一个新的对象并用常量池中的abc对象来初始化它。这种情况下常量池中的对象是复用的所以总共只新创建了一个对象堆中的那个。核心结论new String(abc)一定会在堆上创建一个新的String对象。而字符串常量池中的对象则是按需创建和复用的。4. 与String s1 abc;的区别这是理解String对象创建的关键。String s1 abc;(字面量赋值)JVM 会去字符串常量池中查找是否已经存在abc对象。如果存在则s1直接指向常量池中的这个对象。如果不存在则在常量池中创建一个新的abc对象然后s1指向它。s1仍然存储在栈上它的值是常量池中对象的地址。String s1 new String(abc);(使用new关键字)JVM 一定会在堆内存中创建一个新的String对象。这个新对象的内容由字符串常量池中的abc对象存在则复用不存在则创建初始化。s1存储在栈上它的值是堆中这个新创建对象的地址。示例java运行String s1 abc; String s2 abc; String s3 new String(abc); String s4 new String(abc); ​ System.out.println(s1 s2); // true, 都指向常量池中的同一个对象 System.out.println(s1 s3); // false, s1指向常量池s3指向堆 System.out.println(s3 s4); // false, s3和s4指向堆中两个不同的对象总结s1是一个String类型的引用变量。s1存储在栈Stack上它的值是一个内存地址。这个地址指向堆Heap内存中的一个String对象。这个String对象的内容是abc它位于堆中的字符串常量池。使用new String(abc)会强制在堆上创建一个新的String对象即使常量池中已经存在abc。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/6 6:37:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/6 0:32:51

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/6 1:10:54

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/6 17:25:36

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/6 14:29:05

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/6 14:29:07

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉