重点内容:
-
StringBuilder类的概述与使用方式(面试题目)。
-
BigDecimal类的概述与使用方式(精确计算)。
StringBuilder类(重要)
概述:
StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的。
好处:
StringBuilder比String更适合做字符串的修改操作,效率更好,代码也会更简洁。
StringBuilder构造器
public StringBuilder()//创建一个空白的可变的字符串,不包任何内容
public StringBuilder(String str)//创建一个指定字符串内容的可变字符串对象
StringBuilder常用方法
1.public StringBuilder append(任意类型) : 拼接数据到StringBuilder容器的内容后。
//注意:任意类型(基本类型 + 引用类型) 基本类型:具体的内容 传递10拼接10 引用类型:对象调用toString之后的返回结果
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(10).append(true).append(10.5);
2.public StringBuilder reverse() : 翻转StringBuilder容器中的内容。
sb.reverse();
3.public int length() : 获取容器中的字符数(长度)。
System.out.println("sb对象容器中的字符数(长度) : " + sb.length());
4.public String toString() : 将容器中的内容装换为一个完整的字符串对象返回。
String resultString = sb.toString();
思考:为什么操作字符串建议使用StringBuilder,而不用原来学过的String?
StringBuilder是可变字符串,大量拼接一直在堆内存的一个地址中不开辟新的地址,节约的内存。
面试题:StringBuilder,String,StringBuffer的区别?
- StringBuilder和StringBuffer都是字符串的容器,里面字符串的内容是可变的(在堆中保存结果),String是字符串的容器,但是里面的内容是不可变的(在堆中也可能在池中保存)。
- 从线程安全层次而言,StringBuilder和String线程不安全,StringBuffer是线程安全的。
- 从拼接效率上而言,StringBuilder>StringBuffer>String【大批量拼接】。
- 三个类都实现类CharSequence接口(都遵守了字符序列的规范接口)。
StringJoiner类(重要)
概述:
JDK8开始才有的,跟StringBuilder一样,也是用来操作字符串的,也可以看成是一个容器,创建之后里面的内容是可以变的。
好处:
不仅能提高字符串的操作效率,并且在有些场景下使用它操作字符串,代码会更简洁。
构造器:
public StringJoiner(间隔符号)//创建一个StringJoiner对象,指定拼接时的间隔符号
StringJoiner stringJoiner = new StringJoiner(",");
public StringJoiner(间隔符号,开始符号,结束符号)//创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号
StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
成员方法:
注意:
StringJoiner进行拼接没有任何问题,但是毕竟不是String对象(不能调用String对象的相关方法),只有进行转换之后才能
Math类
概述:
代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。
好处:Math类中的构造私有,方法是静态的。基于类名.方法名()调用即可。
Math类提供的常见方法
//注意:ceil向上取整时,小数点后第一位非0,去掉小数位+1,小数点后第一位是0,是本身。
// floor向下取整时,直接去掉小数位。
// random只能生成0.0~1.0之间的随机数,具体应用时无法具体生成随机区间的数。
System类
System类是Java虚拟机系统的抽象表示,里面提供了一些操作Java虚拟机系统的一些方法。
注意:实际开发中千万不要用!!!
Runtime类
概述:
Runtime类类似任务管理器,可以表示当前系统的运行环境。
Runtime是一个单例类。全局只有一个Runtime对象。
Runtime runtime = Runtime.getRuntime();
Runtime类提供的常见方法:
//(1)public void exit(int status) : 传递状态码终止Java虚拟机(和System.exit一致)
//(2)public int avaliableProcessors() : 获取当前机器运行的Cpu的核心数 [线程池]
System.out.println("当前机器Cpu的核心数是 : " + runtime.availableProcessors());
//(3)public long totalMemory() : 获取当前虚拟机的总内存大小 8bit = 1B / 1024B = 1kb
System.out.println("当前虚拟机的内存大小是 : " + runtime.totalMemory() + "字节");
System.out.println("当前虚拟机的内存大小是 : " + (runtime.totalMemory() / 1024) + "千字节(kb)");
System.out.println("当前虚拟机的内存大小是 : " + (runtime.totalMemory() / 1024 / 1024) + "兆字节(mb)");
//(4)public long freeMemory() : 获取当前虚拟机的可用内存大小 8bit = 1B / 1024B = 1kb
System.out.println("当前虚拟机的可用内存大小是 : " + runtime.freeMemory() + "字节");
System.out.println("当前虚拟机的可用内存大小是 : " + (runtime.freeMemory() / 1024) + "千字节(kb)");
System.out.println("当前虚拟机的可用内存大小是 : " + (runtime.freeMemory() / 1024 / 1024) + "兆字节(mb)");
//(5)public Process exec(String command) : 传递程序的运行命令,运行该程序后,返回表示改程序的进程程序
//传递要运行程序的绝对路径即可(从盘符开始的路径)
Process QQMusicProcess = runtime.exec("D:\\f1.QQ音乐 2022\\QQMusic\\QQMusic1902.09.53.03\\QQMusic.exe");
Thread.sleep(20000); //休眠5秒
QQMusicProcess.destroy(); //销毁QQ音乐进程(关闭程序)
BigDecimal类(重要)
概述:
用于解决浮点型运算时,出现结果失真的问题。
很多语言底层都是基于二进制进行数据运算的,整数(二进制可以),浮点型使用二进制会数据失真。
特点:
BigDecimal是一个类(对象:表示一个数据 任意大小的),并且可以基于十进制数据运算。
BigDecimal常见构造器:
public BigDecimal(double val)//将double转换为BigDecimal
//不推荐使用,底层运算还是使用二进制,数据还是会失真。
public BigDecimal(String val)//将String转换为BigDecimal
//推荐使用
BigDecimal bigDecimal = BigDecimal.valueOf(10.6);
注意:如果使用构造方法创建对象,不要直接传递double数据(底层依旧是二进制运算)。
BigDecimal类的成员方法:
(1)public BigDecimal add(BigDecimal b) : BigDecimal相加 返回保存了结果的BigDecimal对象。
BigDecimal bi1 = new BigDecimal("10.5");
BigDecimal bi2 = BigDecimal.valueOf(10.6);
BigDecimal addResult = bi1.add(bi2);
(2)public BigDecimal subtract(BigDecimal b) : BigDecimal相减 返回保存了结果的BigDecimal对象。
BigDecimal subtractResult = bi1.subtract(bi2);
(3)public BigDecimal multiply(BigDecimal b) : BigDecimal相乘 返回保存了结果的BigDecimal对象。
BigDecimal multiplyResult = bi1.multiply(bi2);
★(4)public BigDecimal divide(BigDecimal b,int scale,RoundingMode roundingMode) : BigDecimal相除返回保存了结果的BigDecimal对象。
RoundingMode.UP 进一法 / RoundingMode.DOWN 去尾法 / RoundingMode.HALF_UP 四舍五入法
BigDecimal divideResult = bi1.divide(bi2, 2, RoundingMode.DOWN);
(5)public double doubleValue() : 获取小数结果 / public int intValue() : 获取整数结果
double doubleValue = divideResult.doubleValue();