还剩3页未读,继续阅读
文本内容:
一方面不属于种基本数据类型,是一种对象
1.Str i n g8St ri ng由于对象日勺默认值是因此的默认值也是但null,St r i ngnul I;它又是一种特殊的对象,有其他对象没有的某些特性和都是声明一种新时空字符
2.new Stri n gn ewString“”串,是空串不是nu I I;M
3.String st r=k vilI”;K,J的区别S trin g str=n ew St r i n gkvi Il;A在这里,我们不谈堆,也不谈栈,只先简朴引入常量池这个简朴时概念常量池指的是在编译期被拟定,并被保存在已编const n t pool译时.文献中的某些数据它涉及了有关类、措施、接口等中时class常量,也涉及字符串常量看例1String sO=k vi11v;St ri ng sl=k vill;Mtrin g s2=“kv+“ill”;Syst e m.out.p rin t Ins0==sl;^Sys t em.out.print1n s0==s2;成果为:true atr ue一方面,我们要懂得会保证一种字符串常量只有一种拷贝Java由于例子中曰勺和中日勺都是字符串常量,它们在编译sO sikvill”期就被拟定了,因此为而”和也都是字符串常sO==s1true;kv”ill”量,当一种字符串由多种字符串常量连接而成时,它自己肯定也是字符串常量,因此也同样在编译期就被解析为一种字符串常量,因此s2s2也是常量池中的一种引用kvill”因此我们得出二二二二用仓立的sO sis2;4new Str i ngijA字符串不是常量,不能在编译期就拟定,因此创立的字new String符串不放入常量池中,它们有自己日勺地址空间a看例2:AS tring s0=k vill;aStri ng s l=new Stringk vil1”;Stri ng s2=“kv+new String“ill”;System.out.p ri nt1ns0--si;^System,out.p rintln s0==s2;System.out.printl ns1==s2;falsefal s e Afalse例中还是常量池中时应用,由于无法在编译A2so kvill”s1期拟定,因此是运营时创立的新对象”时引用,由于有后半kvi II”s2部分因止匕也无法在编译期拟定,因此也是一种新n ewS tring“ill”创立对象”日勺应用;明白了这些也就懂得为什么得kv i II”出此成果了A
4.S tring,intern:A再补充简介一点:存在于.文献中的常量池,在运营期被clas s装载,并且可以扩充措施就是扩充常量JVM StringWin te rn池的一种措施;当一种实例调用措施时,Str ing strintern J查找常量池中与否有相似的字符串常量,如果有,QV Un icod㊀则返回其引用,如果没有,则在常量池中增长一种等于的Unicod㊀str字符串并返回它日勺引用;看例就清晰了3A例3:St rings0=k vi11;aStri ngs1=n ewString kvill”;aSt ring s2=new String“kvi H”;Sy stem.o ut.pr int1n s0=二s1;S ystem.o ut.pri nt1n**********;inte rn0;A
1.Ss2=s
2.in tern;//把常量池中“kv i11”的引用赋给s2System,o ut.pri nt1ns0==si;S ystem,ou t.prin tinsO==sl・int e rn;S ystem.ou t.print1n s0==s2;fa1se a**********Afa1se〃虽然执行了si.intern,但它日勺返回值没有赋给sitr u e〃阐明si.in tern返回区J是常量池中”kvil1”日勺引用tArue最后我再破除一种错误的理解:a有人说,“使用措施则可以将一种类日勺Str ing.intern String保存到一种全局表中,如果具有相似值的字符串已St ringUn icode经在这个表中,那么该措施返回表中已有字符串的地址,如果在表中没有相似值的字符串,则将自己的地址注册到表中“如果我把他说的这个全局的表理解为常量池的话,他的最后一句话,“如果在Stri ng表中没有相似值日勺字符串,则将自己的地址注册到表中”是错时:a a看例4:S tring sl=n ewS tring〃k vill〃;aS trings2=s
1.i ntern;Sys tem.ou t.printinsi==sl.int ern;Sys tem.ou t.pr int1nsl+〃〃+s2;S ystem.out.p rint1ns2=二s
1.intern;f alsek vill kvilltrue在这个类中我们没有声名一种常量,因此常量池中一开kvill”始是没有的,当我们调用后就在常量池中kvil I”si.inte rn新添加了一种常量,本来时不在常量池中日勺仍然存kv iIF kvi I I”在,也就不是“将自己日勺地址注册到常量池中”To为阐明本来的仍然存在;as1==s1J ntern false“kvill”A目前为常量池中门”日勺地址,因此有怡s2“kvi s2==sl.in rn为atru㊀有关
5.equals^n==:这个对于简朴来说就是比较两字符串的序列与否String Unicod eA相称,如果相等返回而二二是比较两字符串曰勺地址与否相似,true;也就是与否是同一种字符串时引用A有关是不可变的
6.Str ing◎这一说又要说诸多,大伙只要懂得日勺实例一旦生成就不会St ring再变化了,例如说H;String str=kv+iII”+”an s”就是有个字符串常量,一方面“和“生成了存在内存4kv illkvill”中,然后又和”“生成存在内存中,最后又和生成kv iII”kvill了;并把这个字符串的地址赋给了就是由于kviII cins”str,String的“不可变”产生了诸多临时变量,这也就是为什么建议用StringB uff的因素了,由于是可变化日勺er Str ingBuffer。
个人认证
优秀文档
获得点赞 0