JDK1.5下的String优化

本文深入探讨了Java中字符串操作的优化方法,包括使用StringBuilder替代传统的字符串加法运算,以及Java String类的String池概念。通过具体代码实例展示了如何在不同版本的Java中实现更高效、更优化的字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String s = "mx"String s1 = "java"String s2 = s + s1; System.out.println(s2);

  可以看到,编译后的程序中,s2的计算仍然使用了s + s1的方式,换句话说还是生成了第三个字符串对象。那么JDK1.5编译后的程序又是怎样的呢?
String s = "mx"String s1 = "java"String s2 = (new StringBuilder()).append(s).append(s1).toString();System.out.println(s2);

  可以看到,经JDK1.5编译后的代码使用了StringBuilder来进行字符串的运算,如果象上面代码那样仅仅一个运算,那么看不出什么效果(因为在运算时,新创建了一个StringBuilder的对象),若存在大量运算时,效果就非常明显了。因此,在使用JDK1.5以后的版本编程时,字符串加运算就不必在意了。 
  在网上看到有些网友在测试JDK1.5的String时,用了下面的方法:
String a = "ab"String b = "a"String c = "b"System.out.println(a == (b + c));

  返回true,就认为是JDK1.5对String的优化。其实这是不对的,即使在JDK1.5以前的版本下执行上面这段代码,返回值依然是true。这是因为java有String池的概念。

java中的String池

先来看看下面这段代码,你知道它的结果吗?

程序代码
public class StringTest1{
  public static void main(String[] args) {
    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1 == str2);
  }
}


   正确答案应该是true。再来看下面这段代码:


程序代码
public class StringTest2 {
  public static void main(String[] args) {
    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1 == str2);
  }
}


   正确答案是false。

   众所周知,java的String是不可改变的字符串对象。为了提高效率,java为String类提供了串池。正如大家所看到的那样,在StringTest1中就使用了串池。当你重新声明一个String型变量为abc时,将使用串池里原来的那个abc,而不重新分配内存,也就是说,str2与str1将会指向同一块内存。所以结果为true。在StringTest2中使用了普通对象的声明方式,系统将会为str1和str2各分配一块内存。所以结果为false。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值