String,StringBuffer,StringBuilder分析

1、String:

  1. String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则纹丝未动。
  2. String字符串不可变,线程安全,开销大,垃圾产生多

2、StringBuffer

  1. StringBuffer每一个修改方法,实际都是在操作StringBuffer初始化时所创建的对象
  2. StringBuffer字符串可变,线程安全,开销大

3、StringBuilder

  1. StringBuilder每一个修改方法,实际都是在操作StringBuilder初始化时所创建的对象
  2. StringBuilder字符串可变,非线程安全,开销小。

String,StringBuilder字符串可变测试

public static String uocase(String s){
        return s.toUpperCase();
    }

    public static StringBuilder apendDemo(StringBuilder s){
        return s.append("123");
    }

    public static void main(String[] args) {
        String a = "asd";
        System.out.println(a);

        String aa = uocase(a);
        System.out.println(aa);
        System.out.println(a);


        StringBuilder b = new StringBuilder("asdasd");
        System.out.println(b);

        StringBuilder bb = apendDemo(b);
        System.out.println(b);
        System.out.println(bb);

测试结果:
asd
ASD
asd

asdasd
asdasd123
asdasd123
    }
  • 从上测试结果可以看出,对String字符串进行操作时,总是在不断创建新的String对象,用来接收String改变后的值
    
  • 而StringBuilder在操作时候,总是对StringBuilder原对象进行操作
    

以上是Java编程思想给出的一个示例思路。不够明显的话,看下面这个例子

    public static void main(String[] args) {
        //-----------String-------------------------
        String param = "字符串";
        System.out.println(param);
        System.out.println(param.hashCode());

        param = param+":demo";
        System.out.println(param);
        System.out.println(param.hashCode());

        //------------StringBuilder-------------------------
        StringBuilder stringBuilder = new StringBuilder("StringBuilder初始值");
        System.out.println(stringBuilder);
        System.out.println(stringBuilder.hashCode());

        stringBuilder.append("拼接值");
        System.out.println(stringBuilder);
        System.out.println(stringBuilder.hashCode());

        //-------------StringBuffer-----------------------------------
        StringBuffer stringBuffer = new StringBuffer("StringBuffer初始值");
        System.out.println(stringBuffer);
        System.out.println(stringBuffer.hashCode());

        stringBuffer.append("拼接值");
        System.out.println(stringBuffer);
        System.out.println(stringBuffer.hashCode());
    }
    输出结果:
	字符串
	23468387
	字符串:demo
	1137810842
	
	StringBuilder初始值
	780237624
	StringBuilder初始值拼接值
	780237624
	
	StringBuffer初始值
	205797316
	StringBuffer初始值拼接值
	205797316

HashCode:在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行hashcode比较时所用的信息没有被修改。

  • 可以看出,只有String再进行操作后,HashCode码有变化。String创建了一个新对象接收,其他两种字符,依旧是在原对象上进行操作
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值