String两种不同的赋值方式.docxVIP

  • 1
  • 0
  • 约2.43千字
  • 约 3页
  • 2017-11-20 发布于北京
  • 举报
String两种不同的赋值方式

String主要有这么两种赋值方式:一、类似普通对象,通过new创建字符串对象。String str = new String(abc);二、类似原型那样直接赋值。如String str = abc;这两种赋值方式有什么不同,估计很多人也多少有些了解?下面我们主要围绕几个问题展开:1、为什么String可以不用new就可以创建对象?2、这两种赋值方式有什么不同?一、打开了String.class,有这么一段介绍:view plaincopy to clipboardprint?/**?*?The?codeString/code?class?represents?character?strings.?All??*?string?literals?in?Java?programs,?such?as?codeabc/code,?are??*?implemented?as?instances?of?this?class.??*?p??*?Strings?are?constant;?their?values?cannot?be?changed?after?they??*?are?created.?String?buffers?support?mutable?strings.??*?Because?String?objects?are?immutable?they?can?be?shared.?For?example:??*?pblockquotepre??*?????String?str?=?abc;??*?/pre/blockquotep??*?is?equivalent?to:??*?pblockquotepre??*?????char?data[]?=?{a,?b,?c};??*?????String?str?=?new?String(data);??*?/pre/blockquotep??*?Here?are?some?more?examples?of?how?strings?can?be?used:??*?pblockquotepre??*?????System.out.println(abc);??*?????String?cde?=?cde;??*?????System.out.println(abc?+?cde);??*?????String?c?=?abc.substring(2,3);??*?????String?d?=?cde.substring(1,?2);??*?/pre/blockquote??*?p??*/??通过上面的介绍,我们可以清楚,直接赋值的话,赋值方式二,是通过编译器在起作用,当你对abc没有通过new创建时,他会自动默认给你调用构造函数new String(char value[]).所以问题一也就有答案了。不显式调用String的构造函数(通过new叫显式调用),其实JDK编译器会自动给你加上。但也并不全然,显式和隐式之间也有差别的。二、隐式:String ? password=ok;利用到了字符串缓冲池,也就是说如果缓冲池中已经存在了相同的字符串,就不会产生新的对象,而直接返回缓冲池中的字符串对象的引用。 ? ? 如: ? ? String ? a ? = ? ok;???// 新建了一个String对象? String ? b ? = ? ok;???//?从缓冲池找? String ? c ? = ? new ? String(ok);???// 新建一个String对象? String ? d ? = ? new ? String(ok);???//?不从缓冲池找,新建一个????? System.out.println(a==b);//将输出true;因为两个变量指向同一个对象。 ? ? System.out.println(c==d);//将输出flase;因为两个变量不指向同一个对象。虽然值相同,只有用c.equals(d)才能返回true.?用Eclipse Debug了一下,查看了b和c的组成,外部结构式一样的,但是内存地址没法查看。由图可以看出,b和c的value是一样的,而equals方法正是比较value的每个字符得出结果的。而=是比较对象的内存地址得出的(引用的内容来自同一个地方):下面是String的equals的源代码:view plaincopy to clipboardprint????public?boolean?equals(Object?anObject)?{??if?(this?==?anObject)?{??????return?true;??}??if?(anObject?instanceof?String)?{??????String?anoth

文档评论(0)

1亿VIP精品文档

相关文档