Java 字符串优化

1. 字符串优化处理

     Java对String做了大量优化,主要以下三个方面:
     1)不变性      多线程共享时可以省略同步和锁等待的时间
     2)针对常量池的优化   拥有相同的值时,它们只引用常量池的同一个拷贝(str.intern()可以返回的即常量池的引用)
     3)类型的final定义
       

1.1  jdk6 subString()方法的内存溢出

      jdk6 subString()方法使用的是通过 偏移量来截取字符串,如果for很多次循环截取一个大字符串的一小部分,就容易造成内存溢出,但是jdk 7之后采用的是 System.arraycopy 意思是将截取后的字符串复制一份出来,
     另外如果使用jdk6的话,用new String(str.substring(begin,end))返回新字符串也不会出现内存溢出,因为以前的大String对象失去所有的强引用,可以被垃圾回收器回收。

1.2 StringBuffer append() 和 String 常量字符串相加的误区:
1
String result =  "a"  "b"  "c"  "d" ;
    对于常量字符串的累加,Java在编译时就做了充分的优化,对于这些在编译时便能确定取值的字符串操作,在编译时就进行了计算,因此,在运行时上面代码并没有如想象中生成大量的String实例。上诉代码反编译后可以看到就是
    String = "abcd";

但是如下代码,Java在编译时不会确定result的值,还是建议用StringBuffer或者StringBuilder
1
2
3
4
5
String a = "a" ;
String b = "b" ;
String c = "c" ;
String d = "d" ;
String result = a + b + c +d ;

1.3 StringBuffer 和 StringBuilder 设置容量参数
   
    public StringBuilder(int capacity)
    public StringBuffer(int capacity)
    如果提前知道容量,可以直接通过构造函数传入,避免数组复制


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值