String v1="a";//(1)
String v2=new String("a");//(2)
String v3="a";//(3)
String v4="ab";
String v5=v4.subString(0,1);
第一种方式的定义,先在栈中 定义一个变量v1,然后在常量池未找到"a"的常量定义,然后生成一个“a”的常量,最后v1指向这个常量的地址。
第二张方式的定义,先在栈中 定义一个变量v2,然后在堆中new一个String类型的对象,赋值为"a",最后v2指向这个堆上的内存。
第三种方式的定义,因为内存区域内已经有了一个"a"的常量,v3直接指向这个常量。
综上,v1和v3的地址空间相同,v2是另外的一个地址空间。
v4指向的是"ab"的常量,subString实现的时候,除了对startIndex endIndex做了越界处理,就是调用了new String。所以v5是虽然值也是a,但是是另外一个new的对象。
v1==v3//true
v1==v2//false
v1==v5//false
//
以上问题涉及到java的内存分配问题。变量,常量 都存在栈上,new 的对象,数组存在堆上。
String 类型 地址空间
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 弗洛伊德算法适用于为图中每一个顶点求最短路径,思路如下 检查图中任何一个 到 任何另一个点能否通过第一个点降低最短...
- 市场研究公司 IDC 发布的最新数据预测,2015年第二季度,Apple Watch 全球的销量为360万。这个数...