前进的蜗牛

java中关于String对象的解析

java中的字符串是我们经常使用的,对于其创建的字符串对象往往很让人疑惑,下面做几点关键性说明:

 

  1. 首先我们要明确String final类,即创建的对象为最终态,即不能被修改。所以说String是一个常量,一旦创建,其值是不能被改变的。然后java中有一个字符串缓冲池(String pool)。当使用“+”拼接时会产生一个新的String对象,而不是向原有的对象追加内容。

  2. 创建字符串的两种方法(本人自己的叫法):

      1)字面赋值的方式: 如 String s = "aa";这样也是创建了一个对象。

      2)常规对象创建方式: 如 String s = new String("aa");

  3.java中有一个字符串缓冲池(String pool),位于栈中

      1)当通过字面赋值的方式创建String对象 s 时,会检查字符串缓冲池中是否有"aa"对像存在,如果有,则不创建新的对象,而是将已经存在的"aa"的对象的引用指向s。如果没有,则创建一个新的内容为"aa"的对象,并将其引用指向s。

      2)当通过常规对象创建方式创建对象s时,首先也会检查String pool中是否有"aa"对象存在,如果有,这直接在堆中再创建一个内容为"aa"的对象,并将其引用指向s,即 String s = new String("aa");只创建了一个对象,但实际是有两个内容为"aa"的对象。如果String pool中没有该对象"aa",那么会先在String pool中创建一个对象,并且之后会再次在堆(heap)中创建一个内容相同的对象并将其引用赋给s,即创建了两个引用不同的对象。所以,这种方式可能会创建一个或两个对象,但最终是存在两个内容相同引用不同的对象。

 

posted @ 2013-08-29 23:35  小猪突然地  阅读(695)  评论(0编辑  收藏  举报

既然选择了就得坚持到底