码迷,mamicode.com
首页 > 编程语言 > 详细

初探Java字符串

时间:2015-12-29 11:09:04      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

链接:http://mccxj.github.io/blog/20130615_java-string-constant-pool.html

 

String印象

初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是final的。

 

不过,String是有字面量这一说法的,这是其他类型所没有的特性(除原生类型)。另外,java中也有字符串常量池这个说法,用来存储字符串字面量,不是在堆上,而是在方法区里边存在的。

 

字面量和常量池初探

 

字符串对象内部是用字符数组存储的,那么看下面的例子:

 

String m = "hello,world";

String n = "hello,world";

String u = new String(m);

String v = new String("hello,world");

 

这些语句会发生什么事情? 

 

  1. 会分配一个11长度的char数组,并在常量池分配一个由这个char数组组成的字符串,然后由m去引用这个字符串。

  2. 用n去引用常量池里边的字符串,所以和n引用的是同一个对象。

  3. 生成一个新的字符串,但内部的字符数组引用着m内部的字符数组。

  4. 同样会生成一个新的字符串,但内部的字符数组引用常量池里边的字符串内部的字符数组,意思是和u是同样的字符数组。

 

如果我们使用一个图来表示的话,情况就大概是这样的(使用虚线只是表示两者其实没什么特别的关系):

 

初探Java字符串

标签:

原文地址:http://www.cnblogs.com/abapscript/p/5084999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!