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正则表达式中点符号的用法解析及字...
2024-12-24 16:32:37C语言实现:二维数组存储3个字符串,输入...
2024-12-27 01:34:15JavaEE SDK与JDK:深入解析两...
2024-12-14 21:35:05武汉Java培训机构综合评测:五大实力派...
2024-12-16 07:11:50Java学习攻略:零基础入门,是否需要先...
2024-12-28 23:31:43Java基础:字符串存入文件与从文件读取...
2024-12-18 07:59:21武汉Java培训机构推荐:北大青鸟,地铁...
2024-12-25 01:26:39揭秘Java前端与后端:技术区别与核心组...
2024-12-15 19:09:22程序员面试必备书籍清单:助力求职成功
2024-12-30 13:45:53Python比较字符与数字大小:理解内置...
2024-12-16 05:18:11最新文章
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
热门文章
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 GUI教程:创建带随机数生成功...
求助:用Java设计一个界面,要求添加5个按钮和一个显示窗口能够生成随机数!急急...
9
Java保留字详解:类型、语句、修饰符与...
Java有没有goto?goto是Java保留字,目前在Java中未使用。其实g...
10
Java标识符规则详解:命名规范与组成要...
java中标识符由什么组成?标识符?关键词是什么?谢谢!标识符是用于命名变量、类...