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

第五条 避免创建不必要的对象
(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)
[color=red]注意不要写这种代码[/color]

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;
}
}
}

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

[size=large][color=red]总之(1)注意选择好String,把String安排到好的位置
(2)在多次循环中小心java的自动装箱拆箱功能,它也会浪费大量的资源。
(3)如果有些变量是不变的话,那就没必要每次都实例化它,只要一个就够了,可以用singleton,枚举或者其他合适的方法[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值