2 w410589502 w410589502 于 2014.08.19 23:17 提问

关于java中String常量池

String常量池具体可以干一些事情,什么东西可以放在常量池中。常量池中的数据是如何被回收的

1个回答

u012585224
u012585224   2014.08.22 16:20

常量池包含代码中所定义的各种基本数据类型(比如int,long,float等等)和对象型(如String及数组)的常量值外,还包含一些以文本形式出现的符号引用。String的字面值引用可以放在常量池里面
:CONSTANT_String 8 String类型字面值的引用 。String 对象(内存)的不变性机制会使修改String字符串时,产生大量的对象,因为每次改变字符串,都会生成一个新的String。 java 为了更有效的使用内存,常量池在编译期遇见String 字符串时,它会检查该池内是否已经存在相同的String 字符串,如果找到,就把新变量的引用指向现有的字符串对象,不创建任何新的String 常量对象,没找到再创建新的。所以对一个字符串对象的任何修改,都会产生一个新的字符串对象,原来的依然存在,等待垃圾回收。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java : String 与常量池
先上题目: String s1 = "abc"; String s2 = "abc"; System.out.println("s1==s2:"+(s1==s2));//true ,因为指向的是常量池中同一对象。 System.out.println("s1.equals(s2):"+(s1.equals(s2)));//true
Java多线程String的常量池特性
在JVM中具有String常量池缓存的功能将synchronized(string)同步块与String联合使用时,要注意常量池带来的一些例外。 出现这样的情况是因为String的两个值都是AA,两个线程持有相同的锁,所以造成线程B不能执行。这就是String常量池所带来的问题。 这样实例化一个对象就持有两个不同的锁了。
Java之String常量池的理解
1. 常量池概念1.1 常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = “java”这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间 百度百科2. String类和常量池2.1 String的”==” 和 “equals()” ==
java String常量池与字符串拼接性能优化
----String常量池---- 1.常量池中的对象从哪里来的?String s1="hanhan"; String s2="hanhan"; System.out.println(s1==s2);//true当我们创建String对象采用字面量形式时,JVM首先会对这个字面量进行检查,如果常量池中存放有该字面量,则直接使用,否则创建新的对象并将其引用放入常量池中。String s1="han"
java常量池概念,String,Integer等包装类对常量池的应用
在class文件中,“常量池”是最复杂也最值得关注的内容。   Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:   类和接口的全限定名;   字段的名称和描述符;   方法和名称和描述符。   在C语言中,如果
java中String常量池
test1: package StringTest; public class test1 { /** * @param args */ public static void main(String[] args){ String a = "a1"; String b = "a"+ 1; System.out.println(a==b); }
java中String与常量池
string是java中的字符串。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。下面介绍java中的String与常量池。 1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. n
Java中的String与常量池
string是java中的字符串。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。下面介绍java中的String与常量池。 1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. n
java中的String与常量池
<br />1. 首先String不属于8种基本数据类型,String是一个对象。 <br />因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 <br />2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; <br />3. String str=”kvill”; <br />String str=new String (“kvill”);的区别: <br />  在这里,我们不谈堆
JAVA中的String常量池
ccc