String、StringBuffer、StringBuilder的学习记录

String、StringBuffer、StringBuilder
异同点:
相同点:都是final类,都不能被继承。
不同点:
1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。
2、StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)
如果对这段代码加锁,就可以实现每次只有一个用户能进入这段代码,当执行完了之后,释放这个锁,另一个用户才能进来。
if (money>1000) {
     money = money - 1000;
}
常量字符串的拼接,编译器会做优化,使用String就可以:
String str = "Java" + "PHP" + "Python" + "C";
@Test
    public void test1(){
        String str1 = "abc";
        String str2 = new String("   abcd andord of and ios");
        String str3 = "abc";
        str3.toCharArray();
        System.out.println(str1 == str2);//false
        System.out.println(str1 == str3);//true
        System.out.println(str2 == str3);//false
        System.out.println(str1.equals(str2));//true
        System.out.println(str1.equals(str3));//true
        System.out.println(str2.equals(str3));//true
        System.out.println(str2.indexOf("and",1));//8
        System.out.println(str2.toUpperCase(Locale.ROOT));//   ABCD ANDORD OF AND IOS ---将所有英文转换成大写
        System.out.println(str2.trim());//abcd andord of and ios  ---去除两侧的空格
        System.out.println(str2.startsWith(" ")); //判断是否以" "开头 true
        System.out.println(str2.endsWith("s"));//判断是否以"s"结尾 true
    }
    @Test
    public void test2(){
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(1);//在StringBuffer中添加字段的方法
        StringBuilder stringBuilder = new StringBuilder();
        //StringBuffer和StringBuilder的用法基本相同,但是二者的特性不同
        //StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)
        System.out.println(stringBuffer);
    }

StringBuffer和StringBuilder的区别解释:

拿此段代码做解释

if (money>1000) {
     money = money - 1000;
}

程序的运行是需要时间的,假如 money = 1100 ,如果在极短的时间内有两个或多个线程访问了这段程序,第一个访问的线程做完 if 判断后还没有将 money-1000,此时下一个线程到来,money依然>1000,此时第二个线程也将做 money - 1000的操作,这样money就会变成 -900;这样的错误对银行来说是绝对不允许存在的。

StringBuilder做到的就是上述效果。

而 StringBuffer 在第一个线程访问时会给这段语句上锁,其他线程必须等待它执行完才能访问,只能排队等待,等它执行完money变成100 自然不符合>1000的条件,这样做增加了安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值