String类的两种对象实例化方式比较

关于直接赋值操作中字符串都相同的原因:

在String类进行设计时采用了一种称为共享设计模式的概念,在每一个运行的JVM低层存在一个字符串的对象池(Object Pool),如果用户采用了直接赋值的方式,会将字符串的内容放入池中,一共其他继续使用直接赋值方式的String对象使用,如果新声明的字符串内容不在翅中,则会开辟一个新的,继续放入池中,以供下次使用.

关于共享设计模式的简单解释:就好比家中准备的工具箱一样,如果有一天需要用到螺丝刀,发现家里没有,就去买一把新的,使用完之后不是扔掉而是放到工具箱备下次使用,而这个工具箱是在每个家庭成员中共享的.

 

面试中常会出这样的题:实例化String类的两种方式的区别:

A直接赋值:

例如 String str = "Hello";

只开辟一块内存空间,字符串内容可以自动入池,以供下次使用.

 

B构造方法:

例如 String str = new String("Hello");//这里创建了2个实例化对象,一个是String的匿名对象"Hello",另一个是使用关键字new 实例化的String类对象.

开辟两块堆内存空间,有一块将成为垃圾,并且不能自动入池,需要使用intern()手工入池.

 

 

日后开发中,String对象的实例化永远都采用直接赋值的方式完成.

 

以上文字内容主要出自书籍<<JAVA核心技术精讲>>

posted @ 2014-05-08 23:59  huanlegu0426  阅读(214)  评论(0编辑  收藏  举报
returnTop $(function(){ $('#returnTop').click(function () { $('html,body').animate({ scrollTop: '0px' }, 800); returnfalse; }); });