栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String,StringBuilder,StringBuffer

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String,StringBuilder,StringBuffer

文章目录
  • 一.String
  • 二.StringBuffer
  • 三.StringBuilder
  • 比较


一.String
  • 字符串一旦创建,就不可改变,且该对象打印出来为值
    要想打印16进制地址Integer.toHexString(System.identityHashCode(s2))
 //字符串一旦创建,就不可改变,且该对象打印出来为值,要想获取地址调用toHexString()
        String s2 = "String1";
        System.out.println(Integer.toHexString(System.identityHashCode(s2)));//用于打印String的地址  776ec8df
        s2 = "String2";//这里重新给变量赋值,其实是重新创建了一个对象
        System.out.println(Integer.toHexString(System.identityHashCode(s2))); // 4eec7777

这里打印出的地址是不同的说明不是同一常量

  • 通过双引号进行赋值的变量会放在常量池中,在进行赋值前会先在常量池中进行查找,有直接赋给变量当前值的地址
        String s2 = "String1";
         System.out.println(Integer.toHexString(System.identityHashCode(s2)));//  776ec8df
        String s3 = "String1";
 System.out.println(Integer.toHexString(System.identityHashCode(s3))); // 776ec8df
  • 通过new String()创建的对象是在堆中
   String string = new String("String");
        String string1="String";
        System.out.println(Integer.toHexString(System.identityHashCode(string1)));
        // 3d075dc0
System.out.println(Integer.toHexString(System.identityHashCode(string)));
   //214c265e
  • 字符串的拼接
 //String中的字符串拼接
        String s5=s4+"e";//变量+常量
        String s6="ae";
        String s7="a"+"e";//常量+常量 直接拼接  
        System.out.println(s6==s7);//这里为true因为常量优化机制直接会将其拼接
        System.out.println(s5==s6); //这里为false因为一个在常量池中一个在堆内存中
        
  • 常用方法
 String s222 = "15881902965";   
        String s12 = "3131";
        //字符串数组的相互转换
        char[] chars = s12.toCharArray();
        for (char c : chars
        ) {
            System.out.print(c + " ");

        }
        System.out.println(chars.toString());
        //字符串之间的相互比较
        s12.equals(s222);//比较的是值
        //替换
        String ss="tmd232";
        String replace  = ss.replace("tmd", "**");
        //截取
        String substring = ss.substring(1, 3);
         //切割
        String sss="192,31,3111";
        String sss1="192.31.111";
        String[] split = sss.split(",");
        String[] split1 = sss1.split("\.");//由于是根据正则表达式进行切割,这里需要转义
二.StringBuffer

StringBuffer是线程安全的可变字符串,用于多线程中

 
三.StringBuilder 

StringBuilder是线程不安全的可变字符串,用于单线程,全局变量中
初始长度为16,一般建议提前给定字符串长度

   StringBuilder stringBuilder = new StringBuilder("dada");
        System.out.println(Integer.toHexString(System.identityHashCode(stringBuilder))); //34a245ab
        stringBuilder.append("sda"); //尾部插入
        System.out.println(Integer.toHexString(System.identityHashCode(stringBuilder))); //34a245ab
        System.out.println(stringBuilder); //dadasda
        stringBuilder.insert(0,2); //其中一个位置插入
        System.out.println(stringBuilder);

比较

基本原则:
如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。

不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号