|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。技能|功能String和StringBuffer之概览
创立字符串的较佳路子
滞留字符串带来的优化
毗连字符串时的优化技能
借助StringBuffer的初始化历程的优化技能
关头点String和StringBuffer之概览
非可变对象一旦创立以后就不克不及再被改动,可变对象则能够在创立以后被改动。String对象长短可变对象,StringBuffer对象则是可变对象。为取得更佳的功能你必要依据实践情形胆小如鼠地选择究竟利用这二者中的某一个。上面的话题会作具体的论述。(注重:这个章节假定读者已具有Java的String和StringBuffer的相干基本常识。)创立字符串的较佳路子你能够依照以下体例创立字符串对象:
1.Strings1="hello";
Strings2="hello";
2.Strings3=newString("hello");
Strings4=newString("hello");下面哪一种体例会带来更好的功能呢?上面的代码片段用来丈量两者之间的区分。
StringTest1.javapackagecom.performance.string;/**Thisclassshowsthetimetakenforcreationof
*StringliteralsandStringobjects.
*/publicclassStringTest1{publicstaticvoidmain(String[]args){//createStringliterals
longstartTime=System.currentTimeMillis();
for(inti=0;i<50000;i++){Strings1="hello";
Strings2="hello";
}longendTime=System.currentTimeMillis();
System.out.println("TimetakenforcreationofStringliterals:"
+(endTime-startTime)+"milliseconds");//createStringobjectsusingnewkeyword
longstartTime1=System.currentTimeMillis();
for(inti=0;i<50000;i++){Strings3=newString("hello");
Strings4=newString("hello");
}longendTime1=System.currentTimeMillis();
System.out.println("TimetakenforcreationofStringobjects:"
+(endTime1-startTime1)+"milliseconds");
}
}
这段代码的输入:
TimetakenforcreationofStringliterals:0milliseconds
TimetakenforcreationofStringobjects:170millisecondsJVM是如何处置字符串的呢?
Java假造时机保护一个外部的滞留字符串对象的列表(独一字符串的池)来制止在堆内存中发生反复的String对象。当JVM从class文件里加载字符串字面量并实行的时分,它会先反省一下以后的字符串是不是已存在于滞留字符串列表,假如已存在,那就不会再创立一个新的String对象而是将援用指向已存在的String对象,JVM会在外部为字符串字面量作这类反省,但其实不会为经由过程new关头字创立的String对象作这类反省。固然你能够明白地利用String.intern()办法强迫JVM为经由过程new关头字创立的String对象作如许的反省。如许能够强迫JVM反省外部列表而利用已有的String对象。 以是结论是,JVM会内涵地为字符串字面量保护一些独一的String对象,程序员不必要为字符串字面量而忧愁,可是大概会被一些经由过程new关头字创立的String对象而困扰,不外他们可使用intern()办法来制止在堆内存上创立反复的String对象来改良Java的运转功能。下一大节会向人人展现更多的信息。下图展现了未利用intern()办法来创立字符串的情形。
<br> 你能够本人利用==操纵符和String.equals()办法来编码测试下面提到的区分。==操纵符会前往true假如一些援用指向一个不异的对象但不会判别String对象的内容是不是不异;String.equals()办法会前往true假如被操纵的String对象的内容不异。关于下面的代码会有s1==s2,由于s1和s2两个援用指向统一个对象,关于下面的代码,s3.equals(s4)会前往true由于两个对象的内容都一样为”hello”。你能够从上图看出这类机制。在这里有三个自力的包括了不异的内容(”hello”)的对象,实践上我们不必要这么三个自力的对象DD由于要运转它们的话既华侈工夫又华侈内存。 那末如何才干确保String对象不会反复呢?下一个话题会涵盖关于内建String机制的乐趣。</p>[1][2][3]下一页
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的), |
|