String

java.lang包下

返回值类型 方法 功能
boolean matches(String regex) 如果匹配当前字符串中regex(正则表达式)所表示的字符,如果有返回ture没有返回false
String replaceAll(String regex, String replacement) 用给定的新字符串替换与给定的 regular expression匹配的此字符串的每个子字符串
int compareTo(String anotherString) 按字典顺序比较两个字符串(实际比的时码点值) 得到int的值有三种情况 >0(排序放右边) <0 (排序放左边) =0(位置不变)
void toUpperCase() 将所有在此字符串的所有字符使用默认语言环境的规则大写。
void toLowerCase() 将所有在此字符串的所有字符使用默认语言环境的规则小写

Tips:因为String是一个不可变的长度的字符串 replaceAll(参数列表)得到是一个新的字符串 原串不变

StringBuilder

返回值类型 方法 功能
StringBuilder append(String str) 返回的是StringBuilderl类对象是他自己

StringBuilder和String的区别

String 中定义 的char[]数组是用final修饰的 所以String是不可变字符序列

StringBuilder中定义 的char[]数组 没有被final修饰的 是可变字符序列

StringBulider 比 String拼接快的原因:

String: String str="aa"+"bb"

​ 每次 ""+" 都会创建两个对象

StringBulider sb= new StringBuilder("aa").append("bb")

String str=sb.toString

StringBuilder:

StringBulider sb= new StringBuilder("aa").append("bb")

​ append()方法返回的是this 也就是说是new 出来的它自己 一个对象 可以一直拼接

频繁的向堆申请空间是个比较耗时的操作

补充:

  • StringBuilder初始化时默认字节数组初始化容量大小为16,当容量大于当前字节数组容量时会自动进行1倍扩容再加2,每次扩容都会开辟新空间,并且进行新老字符数组的复制:源码底层通过调用System的一个native本地方法arraycopy实现新老字符数组的复制,该native方法底层会直接操作内存,比一般的for循环遍历复制数组的效率要快很多;
  • 每一次对String声明的对象的内容进行修改,得到的都是另外一个新的字符串常量对象,如果字符串常量池中已经存在该字符串常量对象,则不会再创建~
  • StringBuffer 有 锁机制 可以保证线程安全 并且有个缓存区
    • 在某些情况下(数据量小) 缓存带来的优势 使得StringBuffer 比 StringBuilder 要快
    • 在某些情况下(数据量大) 缓存带来的优势 不足以消除锁带来的影响时 使得StringBuilder 比 StringBuffe 要快

Arrays

Java.util包下数组操作的工具类

没有变量 私有无参构造 方法全部静态

返回值类型 方法 功能
int binarySearch(基本数据类型[] a, 基本数据类型 key) 查找key 在数组中的位置 返回索引
void sort(基本数据类型[] a) 排序基本数据类型的数组(升序)
int[] copyOf(int[] original, int newLength) 复制一个数组 到一个新数组,长度不够的不够的0填充 老数组超"长"的截取
List asList(T... a) 返回由指定数组支持的固定大小的列表(参数是任意数量相同类型)

Date

java.util包下 快被Calendar类取代了

Date 对象里面封装的有到当前的毫秒值 这个毫秒值可以改变

你创建对象后 每次打印的内容都不一样

返回值类型 方法 功能
long getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数
long setTime() 设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点

getTime()得到的是毫秒值 进行精度确定 (类似保留了多少位小数)

比如两次调用getTime()的值是一样的 程序执行也是需要的时间的按说不应该一样

(cpu 主频量级:Ghz-->ns 1ms = 10^6 ns)

SimpleDateFormat

"占位符" a 表示12小时制 配合 h---> 表示1-12的形式表示 12小时制

System

java.lang包下 构造私有化 方法全部静态

返回值类型 方法 功能
long currentTimeMillis() 返回当前时间(以毫秒为单位)
void exit(int status) 终止当前运行的Java虚拟机status!=0 非正常终止
void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置复制到目标数组的指定位置。

BigDecimal

java.math 包下

用途: 用于精确计算 用于精确计算的话 请使用字符串参数创建对象

类比:超大数计算int存不下了 BigInteger ...

构造方法:

BigDecimal(double val)  参数为double 
BigDecimal(String val)  参数为String

常用方法

public BigDecimal add(另一个BigDecimal对象) 加法
public BigDecimal subtract (另一个BigDecimal对象) 减法
public BigDecimal multiply (另一个BigDecimal对象) 乘法
public BigDecimal divide (另一个BigDecimal对象) 除法
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) 除法
常用摄入模式:
  BigDecimal.ROUND_UP  进一法
  BigDecimal.ROUND_FLOOR 去尾法
  BigDecimal.ROUND_HALF_UP 四舍五入

Math

java.lang包下

常用来进行数学计算

math类常用方法
    1.public static int abs(int a) 返回绝对值
    2.public static double ceil(double a) 返回大于等于参数的最小double值,等于一个整数
    3.public static double floor(double a) 返回小于等于参数的最小double值,等于一个整数
    4.public static int round(float a) 按照四舍五入返回最接近参数的int
    5.public static max(int a, int b) 返回最大值
    6.public static min(int a, int b) 返回最小值
    7.public static double pow(double a, double b) 返回a的b次幂
    8.public static double random() 返回值为double的正值 [0.0, 1.0)随机数

Object

java.lang包下

  • 所有类的父类 没有写继承的类 都继承自Object
  • equals():让子类重写比较 子类定义的内容
  • toString():让子类重写 子类定义的要返回的信息内容
  • System.out.print()打印方法中传入引用数据类型时调用的是 Obeje.toString()得到的返回值
//没有重写该方法的类都是比较的地址值
public boolean equals(Object obj) {return (this == obj);}
//没有重写该方法的类都是返回的都是对象的"地址值--哈希值" 
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}

几个面试题的原因

  1. StringBuilder没有重写equals 比较的是地址值
  2. String的equals重写了方法 也是先比较地址值 然后比较类型
// 看程序,分析结果
String s = “abc”;
StringBuilder sb = new StringBuilder(“abc”);
s.equals(sb); //---false
sb.equals(s); //---false