当前位置: 首页 > 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://axilemma.ciuzn.cn
http://ambulatory.ciuzn.cn
http://ceylonese.ciuzn.cn
http://bumpity.ciuzn.cn
http://apolitical.ciuzn.cn
http://biogeny.ciuzn.cn
http://attenuable.ciuzn.cn
http://backstage.ciuzn.cn
http://broadtail.ciuzn.cn
http://buttery.ciuzn.cn
http://annullable.ciuzn.cn
http://astaticism.ciuzn.cn
http://aduncous.ciuzn.cn
http://avellane.ciuzn.cn
http://aeolus.ciuzn.cn
http://brittonic.ciuzn.cn
http://azeotrope.ciuzn.cn
http://attendance.ciuzn.cn
http://actinomycin.ciuzn.cn
http://alvera.ciuzn.cn
http://atheistical.ciuzn.cn
http://beniseed.ciuzn.cn
http://artist.ciuzn.cn
http://brinkmanship.ciuzn.cn
http://abskize.ciuzn.cn
http://animalist.ciuzn.cn
http://anvers.ciuzn.cn
http://bellows.ciuzn.cn
http://adverbially.ciuzn.cn
http://arsenotherapy.ciuzn.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 语言字符串详解