java中常用的类--string和stringbuffer

本篇主要介绍了string和stringbuffer的区别,适用于初学者。

1、二者区别

String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
所以,使用 String 类的场景为:在字符串不经常变化的场景中可以使用 String 类,例如常量的声明、少量的变量运算。
StringBuffer 每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
所以,使用 StringBuffer 类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用 StringBuffer,例如 XML 解析、HTTP 参数解析和封装。
例子:

public static void main(String[] args) {
        StringBuffer s = new StringBuffer("abc");
        s.append("dd");
        s.insert(2, 3);
        System.out.println(s.hashCode());

        String s1 = "abc";
        s1 = "dde";
        s1 = s1.substring(0,2);
        System.out.println(s1.hashCode());
    }

对s的修改始终在原来内存单元进行,所有哈希码不变。S1的任何变化都会生成新的对象,所以哈希码会改变。

public static void main(String[] args) {
        StringBuffer s = new StringBuffer("abc");
        s.append("dd");     // 追加字符
        s.insert(2, 3);     // 插入
        s.replace(0, 3, "A");// 替换
        System.out.println(s);

        String s1 = "abc";
        s1.concat("def");   //链接字符串
        s1.replace('a', 'z');   // 替换
        s1.toUpperCase();   //转为大写
        System.out.println(s1);
    }

对s进行追加,插入等,会改变s的值。对s1进行操作,每次操作都会产生新的对象,而不会改变原来字符串本身。

2、构造方法

String s1 = “hello”;
String s2 = new String(“hello”);
StringBuffer s3= new StringBuffer(“hello”);

3、二者的方法——见API手册

注:哈希码
哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。
下面给出几个常用的哈希码的算法。
1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串所在的堆空间相同,返回的哈希码也相同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值