首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

第五条 避免创办不必要的对象

2012-11-20 
第五条 避免创建不必要的对象第五条 避免创建不必要的对象(1)String s new String(S)String s1 s

第五条 避免创建不必要的对象
第五条 避免创建不必要的对象
(1)

String s = new String("S");String s1 = "s";

二者比较当然是第二种更好,因为第一种比第二种多了一个new了个String。
多new一个String小规模看没什么,所以自己试着写了点代码,扩大这个规模,代码如下:
long l1 = new Date().getTime();for(int i = 0; i<1000000; i++) {String s = new String("S");}long l2 = new Date().getTime();System.out.println(l2 - l1);long l3 = new Date().getTime();String s1;for(int i = 0; i<1000000; i++) {s1 = "S";}long l4 = new Date().getTime();System.out.println(l4 - l3);

我的机子分别是47 0差别果然很大。。。

所以Sun推荐用StringBuilder或者StringBuffer
package com.util;public class Test {public static void main(String[] args) {StringBuilder sd = new StringBuilder();sd.append("H").append("ello");String s = "World";sd.append(s);System.out.println(sd);StringBuffer sb = new StringBuffer();sb.append("H").append("ello");String s1 = "World";sb.append(s1).toString();System.out.println(sd);}}

.String,  StringBuffer  StringBuilder的区别。(Core Java)
答:String的长度是不可变的;
StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要 String,那么使用StringBuffer的toString()方法;线程安全;
StringBuilder是从 JDK 5
开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
但是好像我写代码时,调不调toString方法都一样。
(2)
注意不要写这种代码
package com.util;public class Test {public static void main(String[] args) {Long sum = 0L;for(long i = 0; i<Integer.MAX_VALUE; i++) {sum +=i;}}}

其中有装箱和拆箱主意代码Long和long的区别就行

总之(1)注意选择好String,把String安排到好的位置
(2)在多次循环中小心java的自动装箱拆箱功能,它也会浪费大量的资源。
(3)如果有些变量是不变的话,那就没必要每次都实例化它,只要一个就够了,可以用singleton,枚举或者其他合适的方法

热点排行