美文网首页
String 类型 地址空间

String 类型 地址空间

作者: 尔乐 | 来源:发表于2017-03-08 14:39 被阅读14次

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 类型 地址空间

      本文链接:https://www.haomeiwen.com/subject/yhfbgttx.html