java基础复习 - 12 - String、StringBuilder、StringBuffer

Math

Math类包含用于执行基本数学运算的方法,比如初等指数、对数、平方根和三角函数

  1. abs 绝对值
  2. pow 求幂
  3. ceil 向上取整
  4. floor 向下取整
  5. round 四舍五入
  6. sqrt 求开方
  7. random 求随机数
  8. max求两个数的最大值
  9. min求两个数的最小值
// 详见jdk api文档
int abs = Math.abs(9);

double pow = Math.pow(-3.5, 4);

double ceil = Math.ceil(-3.0001);

Arrays

Arrays 里面包含了一系列静态方法,用于管理或者操作数组(比如排序和搜索)

  1. toString 返回数组的字符串形式 Arrays.toString(arr);
  2. sort排序(自然排序和定制排序自己传入比较器Comparator接口)
  3. binarySearch 通过二分搜索法进行查找,要求必须排好序;如果数组不存在注意返回值 return -(low + 1) 并不一定是-1
  4. Arrays。copyOf(arr, size) 从arr 拷贝 size个元素到新的数组如果拷贝的长度大于arr.length就是新的数组后面加null
  5. fill 数组元素的填充Integerp[] number = new Integer[]{9,3,2} Arrays.fill(num, 99)// {99,99,99} 替换原来的元素
  6. equals 比较两个数组内容是否完全一直 boolean isOk = Arrays.equals(arr,arr2)
  7. asList 将数组转换成list

System

  1. exit 退出当前程序 System.exit(0) 0表示程序退出的状态
  2. arraycoppy:复制数组元素,比较适合底层调用,一般使用Arrays.copy完成复制数组
    int[] src = {1,2,3};
    int[] dest = new int[3];
    System.arraycopy(src, 0, dest, 0, 3);
    
  3. currentTimeMillens; 返回当前时间距离 1970-1-1的毫秒数
  4. gc:运行垃圾回收机制

BigInteger和BigDecimal介绍

  1. BigInteger比较适合保存比较大的整型
    1. add 加
      BigInteger b1 = new BigInteger("15165611189198111881");
      BigInteger b2 = new BigInteger("200");
      BigInteger add = b1.add(b2);
      
    2. subtract 减
    3. multiply 乘
    4. divide 除
  2. BigDecimal适合保存精度较高的浮点数
    1. add 加
      BigDecimal b1 = new BigDecimal("15165611189198111881.15161");
      BigDecimal b2 = new BigDecimal("200.1519198198189198191");
      BigDecimal add = b1.add(b2);
      
    2. subtract 减
    3. multiply 乘
    4. divide 除 如果除不尽 无线循环小数会抛出ArithmeticException,传入精度 b1.divide(b2, BigDecimal.ROUND.CEILING)

第一代日期类Date介绍

  1. Date:精确到毫秒,代表特定的瞬间
  2. 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

  1. 第二代日期类,主要就是Calendar类(日历)
  2. 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也存在的问题是:

  1. 可变性:像日期和时间这样的类应该是不可变的。
  2. 偏移性:Date中的年份是从1900开始的,而月份都是从0开始。
  3. 格式化:格式化只对Date有用,Canlendar则不行。
  4. 此外,他们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。
    第三代日期类常见方法
    LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间/年月日时分秒) JDK8加入
  5. LocalDate只包含日期,可以获取日期字段
  6. LocalTime只包含时间,可以获取时间字段
  7. 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
    }
  1. DateTimeFormatter格式转换
  2. 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

posted @ 2022-04-01 01:41  杨大德  阅读(53)  评论(0)    收藏  举报