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

Java String对象创建过程

1. String 类的对象创建

2. String 类的构造方法

——String() 
初始化新创建的 String对象,使其表示空字符序列。

例如:

String s = new String();

// s = null;

——String(char[] value) 
分配一个新的 String ,以便它表示当前包含在字符数组参数中的字符序列。

例如:

char value[] = {'a','b','c','d'};

String s = new String(value); 

// s = "abcd";

—— String(StringBuilder builder) 
分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。

——String(StringBuffer buffer) 
分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。

3. String类对象创建过程中的内存分配

字符串的两种实例化方式及其差别

1).String str = “abc”;

2).String str = new String(“abc”);

Java运行时会维护一个String Pool(String池), 也叫“字符串区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。

例1:

String name = "张三";

String names = new String("张三");

System.out.println(name == names);

// 输出结果为false;即name 的地址指向与 names的地址指向不一致

 如上图所示,name在创建的过程中,地址直接指向字符串常量池的"张三";    names在创建的过程中,在堆中创建一个对象,names的地址指向对象,对象的地址指向字符串常量池的"张三"。

例2:

String s1 = new String("张三");

String s2 = s1;

System.out.println(name == names); //在 Java 中,对于引用类型,==运算符比较的是两个变量所指向的对象的引用(也就是内存地址),而不是对象的内容。

// 输出结果为true;即name 的地址指向与 names的地址指向一致

  • 首先,在字符串常量池中会检查是否有"张三"这个字符串常量。如果没有,就会在字符串常量池中创建一个"张三"的字符串常量对象。
  • 然后,new String()操作会在堆内存中创建一个新的String对象,这个对象的内容是指向字符串常量池中的"张三"字符串(通过字符数组引用等方式)。此时,s1变量指向的是堆内存中这个新创建的String对象。
  • 接着,String s2 = s1;这行代码执行时,s2变量被赋值为s1的值。在 Java 中,对象变量存储的是对象的引用(即对象在内存中的地址)。所以s2现在也指向了堆内存中s1所指向的那个String对象。


文章转载自:

http://DEwX1TtW.jyzqn.cn
http://vpMCTLae.jyzqn.cn
http://ZENT2aGg.jyzqn.cn
http://nk3XSjH1.jyzqn.cn
http://yAieGNgU.jyzqn.cn
http://CoMrQuGz.jyzqn.cn
http://ninMAoDZ.jyzqn.cn
http://Ato0rWvD.jyzqn.cn
http://ox7CVFhX.jyzqn.cn
http://E9javLcR.jyzqn.cn
http://Yo7yiOT4.jyzqn.cn
http://fHrhWtYd.jyzqn.cn
http://4gRSgY1z.jyzqn.cn
http://c1x9kUup.jyzqn.cn
http://B3AMwy4G.jyzqn.cn
http://IhT5bQuk.jyzqn.cn
http://hRcChW5n.jyzqn.cn
http://6rucNMfv.jyzqn.cn
http://BuKNbePw.jyzqn.cn
http://crFMOY4U.jyzqn.cn
http://ecrs273c.jyzqn.cn
http://SprEw9Cm.jyzqn.cn
http://z1PDUZ1f.jyzqn.cn
http://cvyREwTf.jyzqn.cn
http://JAsXeLx3.jyzqn.cn
http://tZR0ThvC.jyzqn.cn
http://vZHiorgR.jyzqn.cn
http://AZSG2BBl.jyzqn.cn
http://MnY0ogyC.jyzqn.cn
http://e9PHg2vt.jyzqn.cn
http://www.dtcms.com/a/153297.html

相关文章:

  • Rk3568平台通过Jni读取摄像头当前状态值实践案例
  • 【一览表】病理图像处理流程
  • Linux:进程的创建进程的终止
  • ShenNiusModularity项目源码学习(21:ShenNius.Admin.Mvc项目分析-6)
  • 12N60-ASEMI无人机专用功率器件12N60
  • 【多智能体系统组织方式解析】五大架构赋能智能协作
  • 【办公类-89-02】20250424会议记录模版WORD自动添加空格补全下划线
  • Java 调用webservice接口输出xml自动转义
  • std::unorderd_map 简介
  • NestJS——使用TypeORM操作数据库、增删改查、关联查询、QueryBuilder
  • 黑马 redis面试篇笔记
  • ROS-真机向虚拟机器人映射
  • zip是 Python 中 `zip` 函数的一个用法
  • PageView 内嵌套 TabBarView 的滑动冲突
  • 【C++指南】位运算知识详解
  • 利用软件I2C驱动OLED,点亮、熄灭OLED屏幕以及获取当前OLED屏幕开启状态
  • 【蓝桥杯】水质检测
  • 基于大语言模型的AI智能体开发:构建具备工具使用能力的智能助手
  • 一行命令打开iOS模拟器
  • [C] 第6章 C51函数
  • Spring Boot单元测试实战指南:从零到高效测试
  • SEO(Search Engine Optimization,搜索引擎优化)相关知识点
  • Linux:库的制作与原理
  • 第二章:langchain文本向量化(embed)搭建与详细教程-openai接口方式(上)
  • Linux网络编程 深入Linux网络栈:原始套接字链路层实战解析
  • 多语言笔记系列:共享数据
  • 从零开始学Python游戏编程37-精灵4
  • C++中的next_permutation全排列函数
  • Java学习手册:TCP 协议基础
  • C语言教程(十六): C 语言字符串详解