进阶03 System、StringBuilder类

System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:

public static long currentTimeMillis():返回以毫秒为单位的当前时间。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。

public static long currentTimeMillis():返回以毫秒为单位的当前时间。
用来程序的效率
验证for循环打印数字1-9999所需要使用的时间(毫秒)
private static void demo01() {
    //程序执行前,获取一次毫秒值
    long s = System.currentTimeMillis();


    //执行for循环
    for (int i = 1; i <=9999 ; i++) {
        System.out.println(i);
    }
    //程序执行后,获取一次毫秒值
    long e = System.currentTimeMillis();
    System.out.println("程序共耗时:"+(e-s)+"毫秒");//程序共耗时:106毫秒
}
 public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。
    参数:API文档
        src - 源数组。
        srcPos - 源数组中的起始位置(起始索引)。
        dest - 目标数组。
        destPos - 目标数据中的起始位置。
        length - 要复制的数组元素的数量。
    练习:
        将src数组中前3个元素,复制到dest数组的前3个位置上
            复制元素前:
            src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]
            复制元素后:
            src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
 */
private static void demo02() {
    //定义源数组
    int[] src = {1,2,3,4,5};
    //定义目标数组
    int[] dest = {6,7,8,9,10};
    System.out.println("复制前:"+ Arrays.toString(dest));
    //使用System类中的arraycopy把源数组的前3个元素复制到目标数组的前3个位置上
    System.arraycopy(src,0,dest,0,3);
    System.out.println("复制后:"+ Arrays.toString(dest));
}
//    复制前:[6, 7, 8, 9, 10]
//    复制后:[1, 2, 3, 9, 10]

StringBuilder类

1. 字符串拼接问题

StringBuilder的原理.
在这里插入图片描述

  1. 由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。上述图中的String s创建了5个final字符串。

  2. 缓冲区就可以提高效率。

  3. stringbuilder底层是一个数组,初始长度为16。

2. StringBuilder概述

StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。(默认16字符空间,超过自动扩充)

3. 构造方法

java.lang.StringBuilder类:字符串缓冲区,可以提高字符串的效率
构造方法:
StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。

public static void main(String[] args) {
    //空参数构造方法
    StringBuilder bu1 = new StringBuilder();
    System.out.println("bu1:"+bu1);//bu1:""

    //带字符串的构造方法
    StringBuilder bu2 = new StringBuilder("abc");
    System.out.println("bu2:"+bu2);//bu2:abc
}

4.常用方法

public StringBuilder append(…):添加任意类型数据的字符串形式,并返回当前对象自身。使用append方法往StringBuilder中添加数据
public String toString()`:将当前StringBuilder对象转换为String对象。

append方法

   public static void main(String[] args) {
        //创建StringBuilder对象
        StringBuilder bu = new StringBuilder();
        //使用append方法往StringBuilder中添加数据
        //append方法返回的是this, 调用方法的对象bu, this==bu
        StringBuilder bu2 = bu.append("abc");//把bu的地址赋值给了bu2
        System.out.println(bu);//"abc"
        System.out.println(bu2);//"abc"
        System.out.println(bu==bu2);//引用数据类型比较的是地址 true

        //使用append方法无需接收返回值,append可返回调用对象
        bu.append("abc");
        bu.append(1);
        bu.append(true);
        bu.append(8.8);
        bu.append('中');
        System.out.println(bu);//abc1true8.8中

        /*
            链式编程:方法返回值是一个对象,可以继续调用方法
         */
        System.out.println("abc".toUpperCase().toLowerCase().toUpperCase().toLowerCase());
        bu.append("abc").append(1).append(true).append(8.8).append('中');
        System.out.println(bu);//abc1true8.8中

    }
说明:使用append方法就是对原来对象进行内容添加后把地址值赋值给其他对象。
备注:StringBuilder已经覆盖重写了Object当中的toString方法。

toString方法

通过toString方法,StringBuilder对象将会转换为不可变的String对象。

StringBuilder和String可以相互转换:

StringBuilder和String可以相互转换:
String->StringBuilder:可以使用StringBuilder的构造方法
StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。
StringBuilder->String:可以使用StringBuilder中的toString方法
public String toString():将当前StringBuilder对象转换为String对象。

public static void main(String[] args) {
    //String->StringBuilder
    String str = "hello";
    System.out.println("str:"+str);
    StringBuilder bu = new StringBuilder(str);
    //往StringBuilder中添加数据
    bu.append("world");
    System.out.println("bu:"+bu);

    //StringBuilder->String
    String s = bu.toString();
    System.out.println("s:"+s);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值