快速业务通道

Java String字符串对象的创建及管理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
,才说String类型是不可变的(immutable)。

2.String类有一个特殊的创建方法,就是使用""双引号来创建.例如new String("i am")实际创建了2个String对象,一个是"i am"通过""双引号创建的,另一个是通过new创建的.只不过他们创建的时期不同, 一个是编译期,一个是运行期!

3.java对String类型重载了+操作符,可以直接使用+对两个字符串进行连接。

4.运行期调用String类的intern()方法可以向String Pool中动态添加对象。

String的创建方法一般有如下几种

1.直接使用""引号创建;

2.使用new String()创建;

3.使用new String("someString")创建以及其他的一些重载构造函数创建;

4.使用重载的字符串连接操作符+创建。

例1

String s1 = "sss111";    //此语句同上    String s2 = "sss111";    System.out.println(s1 == s2); //结果为true

例2

String s1 = new String("sss111");    String s2 = "sss111";    System.out.println(s1 == s2); //结果为false

例3String s1 = new String("sss111");    s1 = s1.intern();    String s2 = "sss111";    System.out.println(s1 == s2);

Java String字符串对象的创建及管理(3)

时间:2011-01-03 whutfirefox

例4

String s1 = new String("111");    String s2 = "sss111";    String s3 = "sss" + "111";    String s4 = "sss" + s1;    System.out.println(s2 == s3); //true    System.out.println(s2 == s4); //false    System.out.println(s2 == s4.intern()); //true

例5

这个是The Java Language Specification中3.10.5节的例子,有了上面的说明,这个应该不难理解了

package testPackage;    class Test {        public static void main(String[] args) {            String hello = "Hello", lo = "lo";            System.out.print((hello == "Hello") + " ");            System.out.print((Other.hello == hello) + " ");            System.out.print((other.Other.hello == hello) + " ");            System.out.print((hello == ("Hel"+"lo")) + " ");            System.out.print((hello == ("Hel"+lo)) + " ");            System.out.println(hello == ("Hel"+lo).intern());        }    }    class Other { static String hello = "Hello"; }    package other;    public class Other { static String hello = "Hello"; }

输出结果为true true true true false true,请自行分析!

结果上面分析,总结如下:

1.单独使用""引号创建的字符串都是常量,编译期就已经确定存储到String Pool中;

2.使用new String("")创建的对象会存储到heap中,是运行期新创建的;

3.使用只包含常量的字符串连接符如"aa" + "aa"创建的也是常量,编译期就能确定,已经确定存储到String Pool中;

4.使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在heap中;

5.使用"aa" + s1以及new String("aa" + s1)形式创建的对象是否加入到String Pool中我不太确定,可能是必须调用intern()方法才会加入。

还有几个经常考的面

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号