欢迎来到天天文库
浏览记录
ID:59705024
大小:12.37 KB
页数:4页
时间:2020-11-13
《有关Java String常用方法的总结.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、有关JavaString常用方法的总结 本文首先讲述了JavaString的常用方法,用String常量池问题的四个例子对String对象的intern方法理解和分析。 String中的final用法和理解 1.finalStringBuffera=newStringBuffer("111"); 2.finalStringBufferb=newStringBuffer("222"); 3.a=b;//此句编译不通过 4.finalStringBuffera=newStringBuffer("111"); 5.a.appen
2、d("222");//编译通过 6. 可见,final只对引用的"值"(即内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。 String常量池问题的四个例子 下面是几个常见例子的比较分析和理解: 1.[1] 2.Stringa="a1"; 3.Stringb="a"+1; 4.System.out.println((a==b));//result=true 5.Stringa="atrue"; 6.Stringb="a"+"true
3、"; 7.System.out.println((a==b));//result=true 8.Stringa="a3.4"; 9.Stringb="a"+3.4; 10.System.out.println((a==b));//result=true 11. 分析:JVM对于字符串常量的"+"号连接,将程序编译期,JVM就将常量字符串的"+"连接优化为连接后的值,拿"a"+1来说,经编译器优化后在class中就已经是a1。在编译期其字符串常量的值就确定下来,故上面程序最终的结果都为true。 1.[2] 2.Stri
4、nga="ab"; 3.Stringbb="b"; 4.Stringb="a"+bb; 5.System.out.println((a==b));//result=false 6. 分析:JVM对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即"a"+bb无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给b。所以上面程序的结果也就为false。 1.[3] 2.Stringa="ab"; 3.finalStringbb="b"; 4.Stringb="
5、a"+bb; 5.System.out.println((a==b));//result=true 6. 分析:和[3]中唯一不同的是bb字符串加了final修饰,对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。所以此时的"a"+bb和"a"+"b"效果是一样的。故上面程序的结果为true。 1.[4] 2.Stringa="ab"; 3.finalStringbb=getBB(); 4.Stringb="a"+bb; 5.System.out.println
6、((a==b));//result=false 6.privatestaticStringgetBB(){ 7.return"b"; 8.} 9. 分析:JVM对于字符串引用bb,它的值在编译期无法确定,只有在程序运行期调用方法后,将方法的返回值和"a"来动态连接并分配地址为b,故上面程序的结果为false。 通过上面4个例子可以得出得知: 1.Strings="a"+"b"+"c"; 2. 就等价于Strings="abc"; 1.Stringa="a"; 2.Stringb="b"; 3.Stringc="
7、c"; 4.Strings=a+b+c; 5. 这个就不一样了,最终结果等于: 1.StringBuffertemp=newStringBuffer(); 2.temp.append(a).append(b).append(c); 3.Strings=temp.toString(); 4. 由上面的分析结果,可就不难推断出String采用连接运算符(+)效率低下原因分析,形如这样的代码: 1.publicclassTest{ 2.publicstaticvoidmain(Stringargs[]){ 3.Stri
8、ngs=null; 4.for(inti=0;i<100;i++){ 5.s+="a"; 6.} 7.} 8.} 9. 每做一次+就产生个StringBuilder对象,然后append后就扔掉。下次循环再
此文档下载收益归作者所有