常用API学习(二):StringBuilder、StringJoiner类、BigDecimal类及Math类

重点内容:

  1. StringBuilder类的概述与使用方式(面试题目)。

  2. BigDecimal类的概述与使用方式(精确计算)。


StringBuilder类(重要)

概述:

StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的。

好处:

StringBuilder比String更适合做字符串的修改操作,效率更好,代码也会更简洁。

StringBuilder构造器

public StringBuilder()//创建一个空白的可变的字符串,不包任何内容

public StringBuilder(String str)//创建一个指定字符串内容的可变字符串对象

StringBuilder常用方法
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的区别?

  1. StringBuilder和StringBuffer都是字符串的容器,里面字符串的内容是可变的(在堆中保存结果),String是字符串的容器,但是里面的内容是不可变的(在堆中也可能在池中保存)。
  2. 从线程安全层次而言,StringBuilder和String线程不安全,StringBuffer是线程安全的。
  3. 从拼接效率上而言,StringBuilder>StringBuffer>String【大批量拼接】。
  4. 三个类都实现类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();
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值