java基础复习 - 12 - String、StringBuilder、StringBuffer
Math
Math类包含用于执行基本数学运算的方法,比如初等指数、对数、平方根和三角函数
- abs 绝对值
- pow 求幂
- ceil 向上取整
- floor 向下取整
- round 四舍五入
- sqrt 求开方
- random 求随机数
- max求两个数的最大值
- min求两个数的最小值
// 详见jdk api文档
int abs = Math.abs(9);
double pow = Math.pow(-3.5, 4);
double ceil = Math.ceil(-3.0001);
Arrays
Arrays 里面包含了一系列静态方法,用于管理或者操作数组(比如排序和搜索)
- toString 返回数组的字符串形式 Arrays.toString(arr);
- sort排序(自然排序和定制排序自己传入比较器Comparator接口)
- binarySearch 通过二分搜索法进行查找,要求必须排好序;如果数组不存在注意返回值 return -(low + 1) 并不一定是-1
- Arrays。copyOf(arr, size) 从arr 拷贝 size个元素到新的数组如果拷贝的长度大于arr.length就是新的数组后面加null
- fill 数组元素的填充Integerp[] number = new Integer[]{9,3,2} Arrays.fill(num, 99)// {99,99,99} 替换原来的元素
- equals 比较两个数组内容是否完全一直 boolean isOk = Arrays.equals(arr,arr2)
- asList 将数组转换成list
System
- exit 退出当前程序 System.exit(0) 0表示程序退出的状态
- arraycoppy:复制数组元素,比较适合底层调用,一般使用Arrays.copy完成复制数组
int[] src = {1,2,3}; int[] dest = new int[3]; System.arraycopy(src, 0, dest, 0, 3); - currentTimeMillens; 返回当前时间距离 1970-1-1的毫秒数
- gc:运行垃圾回收机制
BigInteger和BigDecimal介绍
- BigInteger比较适合保存比较大的整型
- add 加
BigInteger b1 = new BigInteger("15165611189198111881"); BigInteger b2 = new BigInteger("200"); BigInteger add = b1.add(b2); - subtract 减
- multiply 乘
- divide 除
- add 加
- BigDecimal适合保存精度较高的浮点数
- add 加
BigDecimal b1 = new BigDecimal("15165611189198111881.15161"); BigDecimal b2 = new BigDecimal("200.1519198198189198191"); BigDecimal add = b1.add(b2); - subtract 减
- multiply 乘
- divide 除 如果除不尽 无线循环小数会抛出ArithmeticException,传入精度 b1.divide(b2, BigDecimal.ROUND.CEILING)
- add 加
第一代日期类Date介绍
- Date:精确到毫秒,代表特定的瞬间
- SimpleDateFormat:格式和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)的规范化
Date d1 = new Date(); // 获取当前系统时间
System.out.println(d1); // 默认国外格式: Sat Apr 02 22:17:21 CST 2022
Date d2 = new Date(9234567); // 通过指定毫秒数得到时间
System.out.println(d1.getTime()); // 获取某个时间对应的毫秒数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh::mm::ss E");
String format = sdf.format(d1);
System.out.println(format); // 2022年04月02日 10::21::17 周六
String s = "1992年04月02日 10::21::17 周六";
Date parse = sdf.parse(s);
System.out.println(parse);
第二代日期类 Calendar
- 第二代日期类,主要就是Calendar类(日历)
- Calendar类是一个抽象类,它为特性瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并未操作日历字段(例如获得下星期的日期)提供了一些方法
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);
// 获取日历对象的某个日历字段
System.out.println("年:" + c.get(Calendar.YEAR));
// 月份从0开始编号的
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));
System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + c.get(Calendar.HOUR));
System.out.println("分:" + c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
// Calendar没有专门的格式化方法,所以需要程序员自己来组合显示
System.out.println(
c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月" + c.get(Calendar.DAY_OF_MONTH) + "日");
}
第三代日期类
前两代日期类的不足分析
JDK1.0中包含了java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了,而Calendar也存在的问题是:
- 可变性:像日期和时间这样的类应该是不可变的。
- 偏移性:Date中的年份是从1900开始的,而月份都是从0开始。
- 格式化:格式化只对Date有用,Canlendar则不行。
- 此外,他们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。
第三代日期类常见方法
LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间/年月日时分秒) JDK8加入 - LocalDate只包含日期,可以获取日期字段
- LocalTime只包含时间,可以获取时间字段
- LocalDateTime包含日期+时间,可以获取日期和事件字段
public static void main(String[] args) {
// 1. 使用now获取当前日期时间
LocalDateTime ldt = LocalDateTime.now();
// 2. 使用DataTimeFormatter 对象来进行格式化
DateTimeFormatter format = DateTimeFormatter .ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
String f1 = format.format(ldt);
System.out.println(f1); // 2022年04月06日 02小时03分钟27秒
System.out.println(ldt); // 2022-04-06T01:55:21.102355200
System.out.println(ldt.getYear()); // 2022
System.out.println(ldt.getMonth()); // APRIL
System.out.println(ldt.getMonthValue()); // 4
System.out.println(ldt.getDayOfMonth()); // 6
System.out.println(ldt.getHour()); // 1
System.out.println(ldt.getMinute()); // 58
System.out.println(ldt.getSecond()); // 21
}
- DateTimeFormatter格式转换
- Instant时间戳
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
}
String s1 = "hspedu";
Animal a = new Animal(s1);
Animal b = new Animal(s1);
System.out.println(a == b); \\ false
System.out.println(a.equals(b)); \\ false
System.out.println(a.name == b.name); \\ true
String s4 = new String("hspedu");
String s5 = "hspedu";
System.out.println(s1 == s4); \\ false
System.out.println(s4 == s5); \\ false
String t1 = "hello" + s1; // 编译器优化其实是StringBuilder,在堆中开辟地址value中指向常量池
Strinbg t2 = "hellohspedu";
System.out.println(t1.intern() == t2); \\ true



浙公网安备 33010602011771号