LocalDateTime,StringBuilder,BigDecimal
LocalDateTime使用(通过这个类创建一个日期时间的实例对象)
// LocalDate -->日期
// LocalTime -->时间
// LocalDateTime -->日期和时间
对于日期时间进行格式化输出:DateTimeFormatter.ofPattern(“指定的格式”)
y表示年份,M表示月份,d表示日期,H表示小时,m表示分钟,s表示秒
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
调用指定的格式:dtf.format(LocalDateTime实例化对象)
–》2025-3-18 14:39:05
public class NetTest {public static void main(String[] args) {// TODO:掌握Java提供的获取时间的方案// jdk8之前的方案 :DateDate date = new Date();System.out.println(date);// 格式化输出时间SimpleDateFormat-->y表示年份,M表示月份,d表示日期,H表示小时,m表示分钟,s表示秒SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String result = sdf.format(date);System.out.println(result);// TODO:jdk8以后的方法// LocalDate -->日期// LocalTime -->时间// LocalDateTime -->日期和时间System.out.println("=================================");LocalDateTime now = LocalDateTime.now();System.out.println(now);// 格式化输出时间:DateTimeFormatterDateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println(dtf.format(now));}
StringBuilder(用于操作字符串,性能较高)高效拼接字符串
原有方法是通过+
对于String字符串进行拼接的
但是由于String这个类是个final类,
所以无法修改它的内容,所以只能通过new一个新对象来替换
导致会有很多无用对象产生,从而导致内存溢出,效率较低
现在推荐选用StringBuilder的append方法进行字符串的拼接(可以进行链式编程)
sb.append("hello").append(" ").append("world");
// TODO:通过String来进行定义字符串,通过StringBuilder进行操作字符串
public static void main(String[] args) {
// TODO:实现高效拼接字符串
// 原有方法是通过 + 进行拼接字符串
/*但是由于String这个类是个final类,
所以无法修改它的内容,所以只能通过new一个新对象来替换*/
//导致会有很多无用对象产生,从而导致内存溢出,效率较低
// TODO:通过StringBuilder进行拼接字符串
// 这种方式运行起来会快很多,因为StringBuilder是一个可变容器StringBuilder sb = new StringBuilder();for (int i = 0; i < 10000; i++) {sb.append(i).append(" ");}System.out.println(sb);
// 最终还是需要通过toString()方法将StringBuilder转化为StringString s = sb.toString();System.out.println(s);System.out.println("-----------------------------------------");// StringBuilder支持链式编程StringBuilder sb2 = new StringBuilder();sb2.append("hello").append(" ").append("world");System.out.println(sb2);// reserve()方法可以反转StringBuilder中的内容sb2.reverse();System.out.println(sb2);
}
BigDecimal(用于解决浮点数的运算的失真问题)
double的0.05+0.01
这个运算会无限接近于0.06(0.06无法表示因为计算机底层的二进制表示无法表示出这个值)
BigDecimal的使用步骤:
BigDecimal.valueOf(double类型的数据)–》得到一个BigDecimal类型的对象
通过这个对象进行运算操作
两个BigDecimal对象bd1,bd2
加法(add)bd1.add(bd2)
减法(subtract)bd1.subtract(bd2)
乘法(multiply)bd1.mutiply(bd2)
除法(devide)bd1.devide(bd2)
TODO:用于项目实例的除法运算的时候:
bd1.devide(bd2,精确的位数,舍入模式)
public static void main(String[] args) {// 通过BigDecimal避免浮点数运算结果失真问题double d1 = 0.05;double d2 = 0.01;double d3 = d1 + d2;//结果无限接近于0.06,但是0.06无法表示因为计算机底层的二进制表示无法表示出这个值System.out.println(d3);
// TODO:通过BigDecimal解决浮点数运算结果失真问题
// 1、将浮点数转换为字符串
// 2、将字符串转换为BigDecimal对象--》调用对应的字符串的构造方法public BigDecimal(String val)String s1 = 0.05 + "";String s2 = 0.01 + "";// String s=Double.toString(0.05);BigDecimal bd1 = new BigDecimal(s1);BigDecimal bd2 = new BigDecimal(s2);BigDecimal bd3 = bd1.add(bd2);System.out.println(bd3);// TODO:优化方法
// 通过直接调用BigDecimal的valueOf方法
// 底层就相当于是调用的构造方法public BigDecimal(String val)BigDecimal bd4 = BigDecimal.valueOf(0.05);BigDecimal bd5 = BigDecimal.valueOf(0.01);BigDecimal bd6 = bd4.add(bd5);
// TODO: 最终目的是将BigDecimal转换为double--》调用对应的doubleValue方法double d4 = bd6.doubleValue();System.out.println(d4);// 减法 subtractBigDecimal bd7 = new BigDecimal("0.05");BigDecimal bd8 = new BigDecimal("0.01");BigDecimal bd9 = bd7.subtract(bd8);double d5 = bd9.doubleValue();System.out.println(d5);// 乘法 multiplyBigDecimal bd10 = new BigDecimal("0.05");BigDecimal bd11 = new BigDecimal("0.01");BigDecimal bd12 = bd10.multiply(bd11);double d6 = bd12.doubleValue();System.out.println(d6);// 除法 divideBigDecimal bd13 = new BigDecimal("0.05");BigDecimal bd14 = new BigDecimal("0.01");BigDecimal bd15 = bd13.divide(bd14);double d7 = bd15.doubleValue();System.out.println(d7);// TODO:除法运算的另外一种写法
// bd1.divide(bd2,精确几位,舍入模式)BigDecimal bd16 = new BigDecimal("0.01");BigDecimal bd17 = new BigDecimal("0.03");BigDecimal bd18 = bd16.divide(bd17,2,BigDecimal.ROUND_HALF_UP);double d8 = bd18.doubleValue();System.out.println(d8);
}