Java字符串初始化原理详解及常量池揭秘
创始人
2024-12-31 10:25:29
0 次浏览
0 评论
有关JAVA中字符串内存分布的问题!
Strings1=newString("abc");//在堆中,创建字符串对象abc,在栈上创建s1引用,指向堆。
Strings2="abc";//在字符串缓冲池中,创建字符串abc对象,并在栈上创建s2引用,指向字符串缓冲池链中的对象。
Strings3="abc";//如果字符串缓冲池中有值为abc的字符串,则创建一个s3引用直接指向它'字符串缓冲池目的。
System.out.println(s1==s2);//结果:false
System.out.println(s2==s3);//结果:true
System.out.println(s2==s3);//结果:true

浅谈Java中字符串的初始化(详细图解)
在深入了解Java字符串类之前,了解JVM字符串处理初始化的细节非常重要。首先了解一下字符串常量池的概念,应该可以实现数据通信,更好理解。
我们来研究一下字符串常量池是如何工作的。
当直接使用双引号声明字符串时,例如Strings1="Hello";,JVM会首先检查字符串常量池中是否已经存在该字符串。
如果存在,则返回该关系;Strings1的实际操作类比是这样的:JVM在字符串常量池中寻找“hello”。
常量池返回到s1。
使用new关键字创建字符串对象,如Strings2=newString("hello");s1==与s2的比较结果为false。
考虑一个例子:第一行代码Strings1=newString("salt")+new("world");,执行过程是先在内存栈中创建两个字符串对象,然后将它们分割成一个新的对象。
s1.intern()方法在池中查找对“helloworld”常量的引用。
结果是s1和“helloworld”引用了常量池中的同一个对象,所以s1==s2返回true。
反编译代码验证字符串初始化操作:第一行和第二行分别声明字符串对象,分别创建并写入堆内存和常量池。
关键在第三行Strings3=s1+s2。
反编译结果显示s3是通过新的key得到的,说明“helloworld”与常量池无关,s4也不是同样的,这是错误的。
综上所述,字符串常量池提供了复用功能。
读完本文,希望您对Java中的字符串初始化机制有更深入的了解。
char*s1="hello";chars2[]="hello";这两个C语言句有什么区别
你好:我简单地回答一下这个问题,以便你能充分理解(1)什么是“你好”?它是一个数组常量,注意C语言中数组没有变量(2)“hello”在内存中是如何存储的。就像一般的数组一样,每个小内存数组并不存储一个字母。
这显然是一个指示变量。
在我们的例子中,这个s用于存储字符的地址。
!这是该数组的首地址。
(4)当我们提取这个首地址时,首先找到首地址,然后按顺序读取后面的字符,直到遇到'\0'所以,可以想象,这个字符串的长度是6。
因为系统自动添加'\0'(5)chars2[]="hello",这是什么?它是一个名为s2的字符集,存储了五个字符h、e、l、o,当然它的长度是5,这就是与第一个的区别,称之为运气。
strcat函数问题
可以,但是有一个前提:s1和s2指向的内存区域不能重叠,并且s1必须有足够的空间容纳s2的字符串。还有,是否在静态存储区,取决于你如何定义这两个地址,是否是静态变量。
相关文章

Java开发者必备:深入浅出JVM知识解...
2024-12-20 00:06:23
标题:Python高效判断100-200...
2024-12-14 17:54:09
Java主流框架盘点:Spring、My...
2025-01-16 07:44:02
Java对象创建方法全解析:四种方式及n...
2024-12-18 08:51:21
Java抽象类与抽象方法:定义、继承与实...
2024-12-31 23:53:34
Java数组排序教程:快速实现10个整数...
2025-01-24 20:59:00
全面解析:Java后端技术栈详解与项目应...
2024-12-29 05:40:13
Java类间变量和方法调用技巧解析
2024-12-24 07:53:48
Java 21新特性解读:虚拟线程发布及...
2025-03-19 08:27:28
Java字符串处理:StringBuil...
2025-02-17 08:21:25最新文章
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
热门文章
1
Java字符串分割技巧:轻松获取逗号前的...
java任意一个字符串,当它碰到第一个逗号时,返回逗号前面的字符串,例如:str...
2
SQL多表连接查询全解析:JOIN语句应...
sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...
3
Java中字符串类型详解:String与...
变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...
4
JavaSE与JavaEE:从基础到企业...
javase 和javaee的区别?JavaSE和JavaEE...
5
Java程序员面试必知:核心技术问答与技...
java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...
6
Java.exe与Javaw.exe:区...
程序中java和javaw有什么区别java和javaw的区别:两者都是Java...
7
深入解析:Java中的javax包及其与...
JAVA导入时,什么是javax?awt是java1.0,swing是java2...
8
Java变量命名规范详解及命名规则实践
boolean类型的变量命名规则布隆类型的可变名称规则:名称名称:小型骆驼名称:...
9
Java命令行运行问题:解决找不到或无法...
在命令行下执行JAVA程序,总是出现找不到或无法加载主类,请教高手啊在命令行上执...
10
Java方法重载与重写:全面解析与实例分...
java中super的用法,以及重载在Java中,关键字是访问父母类的方法或属性...