首页 > 编程知识 正文

Java字符串分割,java字符串批量替换

时间:2023-05-06 11:34:35 阅读:119998 作者:3046

JAVA String对象与字符串常量的关系分析

1字符串内部列表

JAVA中的所有对象都存储在包含字符串对象的堆中。 字符串常量存储在Java.class文件的常量池中,并在编译时确定。 虚拟机为每个装载的类型维护一个常量池。 常量池是用于该类型的常量的有序集合,例如直接常量(string、integer、float point常量)以及对其他类型、字段和方法的符号引用。

例如,

strings=newstring(mystring );

其中字符串常量为“myString”,在编译时存储在常量池的某个位置。 在分析阶段,虚拟机会发现字符串常量“myString”,并在内部字符串常量列表中进行搜索。 如果找不到,则在堆中创建包含字符串[myString]的字符串对象s1,并将该字符串和对应的字符串对象作为名称值对[myString],s1,如下图所示。

如果在虚拟机后发现相同的字符串常量myString,虚拟机将在此内部字符串常量列表中找到相同的字符串,并返回对相应字符串对象的引用。 维护此内部列表的关键是特定字符串在此列表中只出现一次。

例如,如果String s2='myString ',则运行时s2从内部字符串常量列表中检索s1的返回值,因此s2和s1指向同一String对象。 但是,String对象s与s1不同,因为它位于堆中的不同位置。

JAVA字符串常量可以用作String对象。 字符串常量的字符串本身存储在常量池中,字符串内部列表中每个字符串常量的字符串对应于一个String对象。 实际上使用的是这个对象。

双字符串阻止互联网

在某些上下文环境中,只保留一个字符串副本可以提高内存利用率和效率。 String类的intern ) )方法阻止字符串。 如果String对象中包含的字符串不在字符串常量内部列表中,则将该String对象中包含的字符串和对String对象的引用作为名称对保存在内部列表中,最后intern ) )将返回对String对象本身的引用如果String对象包含字符串常量内部列表中的字符串,则返回列表名称-值对中的相应字符串对象引用,并丢弃String对象本身。

例如,s.intern ) )返回与s2相同的引用,以前的s对象将被垃圾回收。

intern ()注意,存储在字符串内部列表中的字符串对象不会被垃圾收集。 生命周期与整个程序相同,因此错误使用会导致内存泄漏。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。