首页 > 编程知识 正文

java字符串过长,java string 常量池

时间:2023-05-06 11:53:57 阅读:119995 作者:3569

# java字符串常量池

#1.什么是字符串常量池

字符串常量池的概念不是java独有的,它为每个不同的字符串对象保留唯一的副本,以节省空间并提高程序运行效率。

## 2.java的字符串常量池

~~~

publicstaticvoidmain (string . args ) throws Exception { )。

字符串str1=' ABC ';

字符串str2=' ABC ';

stringstr3=新字符串(ABC );

stringstr4=新字符串(ABC );

String str5=str3.intern (;

stringstr6=新字符串(ABCD );

system.out.println (str1==str 2: ) ) str1==str2);

system.out.println (str1==str : ) ) str1==str3);

system.out.println (str3==str 4: ) ) str3==str4);

system.out.println (str1==str 5: ) ) str1==str5);

}

~~~

` ` ` java

str1==str2: true

str1==str3: false

str3==str4: false

str1==str5: true

``````

! ((3359 box.Kan cloud.cn/fc 5165 d 072145911 a C1 B9 ca 2224 F5 C1 d _ 700 x498.png ) ) ) ) ) )。

1. `String str1='abc ' `检查常量池,找出是否有' abc '字符串,然后创建并放入' abc '对象

2. `String str2='abc ' `检查常量池,发现' abc '已经存在,直接返回对象引用

3. `String str3=new String('abc ' `在堆中创建字符串对象。 值为“abc”,如果检查常量池,则常量池中有“abc”对象,无需创建

4.` stringstr4=新字符串(ABC ),与步骤3相同的逻辑

5. `String str5=str3.intern (`返回常量池中对str3的引用,并代入str5

6. `String str6=new String('abcd ' `在堆中创建字符串对象。 值为“abcd”,通过检查字符串常量池中是否没有“abcd”对象来创建完成

7 .比较阶段: str1、str2和str5都指向同一对象,str3.intern ()返回常量池中字符串的引用。 ) str3和str4分别指向两个不同的对象

注意:在: jdk1.7之前,字符串常量池位于方法区域中,而1.7之后位于堆中

#3.字符串常量池注意事项

1 .字符串常量池必须是全局共享的,因此设计者必须考虑多线程问题

2 .使用的时候必然有很多字符串只使用一次就不使用了,所以有必要考虑字符串回收的问题

这些都是我们不需要使用者的担心,设计者必须注意的地方。

[ https://www.geeksforgeeks.org/interning-of-string/(https://www.geeksforgeeks.org/interning-of-string/)

[ https://segment fault.com/a/119000000988357 ] (https://segment fault.com/a/119000000988357 ) )。

[ https://en.Wikipedia.org/wiki/string_ interning ] 65https://en.Wikipedia.org/wiki/string _ interning ]

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