StringBuilder概述
- StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。
- 作用:提高字符串的操作效率,如拼接、修改等。
StringBuilder 构造器
public StringBuilder()
创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str)
创建一个指定字符串内容的可变字符串对象
StringBuilder常用方法
| 方法名称 | 说明 |
|---|---|
| public StringBuitsler append(任意类型) | 添加数据并返回StringBuilder对象本身 |
| public StringBuilder reverse() | 将对象的内容反转 |
| public int length() | 返回对象内容长度 |
| public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
为什么拼接、反转字符串建议使用StringBuilder
- String :内容是不可变的、拼接字符串性能差。
- StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。
- 定义字符串使用String
- 拼接、修改等操作字符串使用StringBuilder
案例:打印整数数组
需求:
设计一个方法用于输出任意整型数组的内容,要求输出成如下格式: “该数组内容为:[11,22,33,44,55]”
分析:
- 定义一个方法,要求该方法能够接收数组,并输出数组内容。 —> 需要参数吗?需要返回值类型申明吗?
- 定义一个静态初始化的数组,调用该方法,并传入该数组。
public class StringBuilderTest {
public static void main(String[] args) {
int[] arr1 = null;
System.out.println(toString(arr1));
int[] arr2 = {1, 2, 3, 4, 5};
System.out.println(toString(arr2));
}
public static String toString(int[] arr) {
if (arr != null) {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]).append(i == arr.length - 1 ? "" : ", ");
}
sb.append("]");
return sb.toString();
} else {
return null;
}
}
}
Math类
- 包含执行基本数字运算的方法,Math类没有提供公开的构造器。
- 如何使用类中的成员呢?看类的成员是否都是静态的,如果是,通过类名就可以直接调用
Math类的常用方法
| 方法名称 | 说明 |
|---|---|
| public static int abs(int a) | 获取参数绝对值 |
| public static double ceil(double a) | 向上取整 |
| public static double floor(double a) | 向下取整 |
| public static int round(float a) | 四舍五入 |
| public static int max(int a,int b) | 获取两个int值中的较大值 |
| public static double pow(double a,double b) | 返回a的b次幂的值 |
| public static double random() | 返回值为double的随机值,范围[0.0,1.0) |
System类
System 类概述
- System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。
System类的常用方法
| 方法名称 | 说明 |
|---|---|
| public static void exit(int status) | 终止当前运行的Java 虚拟机,非零表示异常终止 |
| public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
| public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
时间毫秒值
计算机认为时间是有起点的,起始时间: 1970年1月1日 00:00:00
时间毫秒值:指的是从1970年1月1日00:00:00走到此刻的总的毫秒数,应该是很大的。1s = 1000ms。
原因:1970年1月1日算C语言的生日
long time = System.currentTimeMillis();
System.out.printIn(time);//1642740834486
BigDecimal类
BigDecimal作用
- 用于解决浮点型运算精度失真的问题
使用步骤
- 创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
public static BigDecimal valueOf(double val); 包装浮点数成为BigDecimal对象。
BigDecima常用API
| 方法名称 | 说明 |
|---|---|
| public BigDecimal add(BigDecimal b) | 加法 |
| public BigDecimal subtract(BigDecimal b) | 减法 |
| public BigDecimal multiply(BigDecimal b) | 乘法 |
| public BigDecimal divide(BigDecimal b) | 除法 |
| public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) | 除法 |
注意事项
正例:优先推荐入参为String的构造方法,或使用BigDecimal的valueOf方法,此方法内部其实执行了Double 的 toString,而Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1")
BigDecimal recommend2 = BigDecimal valueOf(0.1)