科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道String和stringBuffer类字符串的区别

String和stringBuffer类字符串的区别

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

String和stringBuffer类字符串的区别

作者:kl40127 来源:赛迪网技术社区 2007年11月18日

关键字: 字符串 Buffer string

  • 评论
  • 分享微博
  • 分享邮件

前面看到有人写String和stringBudffer的区别是前者是不能改写的,后者是可以改写的

我觉得说String的字符串不能改变话是不错,但是例子要举好

看看下面这个简单的例子:

首先,

public class xx {
public static void main(String[] args) { 
String s1 = "You are hired!";
String s2 = "You are hired!";
if (s1==s2) {
System.out.println("一个内存空间");
} else {
System.out.println("不是一个内存空间");
}
}
}

打印的结果是:一个内存空间

这里==的意义是两个操作数是否指向同一个对象

可见s2在不用new创建的情况下会自动检索到具有相同内容的内存空间中共享,那么既然s1和s2共享了同一个对象

再看下面的代码

public class xx {
public static void main(String[] args) { String s1 = "You are hired!";
String s2 = "You are hired!";
s1 = s1.replace('h','f');
System.out.println(s1);
if (s1==s2) {
System.out.println("一个内存空间");
} else {
System.out.println("不是一个内存空间");
}
}
}

代码结果是

You are fired!

不是一个内存空间

可见,String中s1的内容虽然被改写,但是已经不在是原来第一次分配到的那个内存空间,也就是String类的内容能被改变,但一旦改变系统将为其分配新的内存

说到与stringBuffer的区别,从根本上来说应该是

stringBuffer在做字符长度变动的时候将继续使用原来的内存空间,不新分配.

而String的长度一旦变动,就如上面的例子一样,其内部将分配新的内存空间.

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章