String 类型 地址空间

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 的对象,数组存在堆上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 弗洛伊德算法适用于为图中每一个顶点求最短路径,思路如下 检查图中任何一个 到 任何另一个点能否通过第一个点降低最短...
    RichardW阅读 4,525评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,183评论 19 139
  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 3,290评论 0 0
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,395评论 0 6
  • 市场研究公司 IDC 发布的最新数据预测,2015年第二季度,Apple Watch 全球的销量为360万。这个数...
    f11015f29d83阅读 2,962评论 0 1

友情链接更多精彩内容