当前位置: 首页 > 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://www.xdnf.cn/news/121465.html

相关文章:

  • 如何借助ETL数据集成工具实现数据一致性?
  • 腾讯云服务器安全——服务防火墙端口放行
  • 【棒球运动】户外运动安全技巧·棒球1号位
  • 多头注意力
  • Redis-缓存应用 本地缓存与分布式缓存的深度解析
  • React 的 useEffect 清理函数详解
  • MCP servers源码详细解析
  • 把dll模块注入到游戏进程的方法_挂起进程注入
  • AOSP CachedAppOptimizer 冻结方案
  • 项目——高并发内存池
  • (八)深入了解AVFoundation-采集:拍照功能的实现
  • Java学习手册:TCP 协议基础
  • Python函数与模块笔记
  • arm64适配系列文章-第十章-arm64环境上jenkins的部署
  • 热度大幅度下降,25西电经济与管理学院(考研录取情况)
  • git检查提交分支和package.json的version版本是否一致
  • 【Axure教程】表格嵌套卡片
  • 什么是公链?公链项目有哪些?公链项目开发
  • Axure疑难杂症:母版菜单设置打开链接后菜单选中效果
  • css3新特性第七章(3D变换)
  • ITL和TTL线程间值的传递
  • AI工程pytorch小白TorchServe部署模型服务
  • nginx
  • DNS域名解析服务
  • 滚珠螺杆在数控机床中如何降低摩擦系数?
  • 植物信号转导概述——学习植物的交流方式
  • Spring Boot 中触发异步任务的几种方式
  • Cifar10-图像分类学习笔记(二)--将图像解析存储到TRAIN文件夹下
  • 点云配准算法之NDT算法原理详解
  • ECMAScript 2025新特性深度解析:JavaScript的又一次进化