常用类:
包装类
关于Integer包装类的缓冲:
对于显示赋值的包装类,他们的值,将会保存在方法去中的常量池中,并不会出现在GC 堆中,但常量池也不会缓冲很多数据放在那里不用,所以常量池中只会缓存一部分数据,Integer包装类的缓存数据范围为 -128 ~ 127 ,如果显示赋值的数值不在这个范围内,那么即使显示赋值,在常量池中也会新new一个位置来存放数据.结果如下
- Boolean:(全部缓存)
- Byte:(全部缓存)
- Character(<= 127缓存)
- Short(-128 — 127缓存)
- Long(-128 — 127缓存)
- Float(没有缓存)
- Doulbe(没有缓存)
包装类小知识:
a.当数值范围为-128~127时:如果两个new出来Integer对象,即使值相同,通过“”比较结果为false,但两个对象直接赋值,则通过“”比较结果为“true,这一点与String非常相似。
b.当数值不在-128~127时,无论通过哪种方式,即使两个对象的值相等,通过“==”比较,其结果为false;
c.当一个Integer对象直接与一个int基本数据类型通过“==”比较,其结果与第一点相同;
d.Integer对象的hash值为数值本身;
把基本数据类型编程对象类型的特殊类
包装类的装箱与拆箱
Integer integer = new Integer(10);//手工装箱
Integer integer2 = 10;//自动装箱
Integer integer1 = Integer.valueOf(10);
int i = integer.intValue();//手工拆箱
int i1 = integer1;//自动拆箱
int n = Integer.ParseInt("389");把字符串变成int的工具方法
字符串转化为基本数据类型
String类
String --> 内容不可改变的Unicode字符序列, 内部使用char[ ] 储存所有字符
因为String内容不可改变,使得任何对于字符串的修改都会产生新的字符串
有变量参与字符串拼接,新变量会产生在gc区
如果所有参与拼接的字符串都是常量,那么新的常量会产生在常量池
String.intern()方法会把字符串留在常量池, 如果常量池中没有,那么将新建一个常量,如果有,那么将返回那个对象的地址 --> 此方法不建议使用,调用太多会导致方法区移除
常量区的字符串没有办法回收
所有函数的范围都是 左闭右开
- public int indexOf(String s) : 找出参数中的子字符串s在当前字符串中首次出现的下标, 从左向右搜索
- public String substring(int start,int end) : 获取子串, 指定开始下标(包含)和结束下标(不包含)
- public String trim() : 修剪当前字符串首尾的空白字符, 空白字符:码值小于等于32
- public boolean equals(Object anObject) 比较两个字符串内容区分大小写
- public boolean equalsIgnoreCase(String other) : 比较字符串内容, 忽略大小写
- public int length() : 返回当前字符串对象的长度(字符个数)
- public char charAt(int index) : 返回当前字符串的指定下标index位置处的字符
- public char[] toCharArray() : 把字符串转换为字符数组, 把内部字符数组制作了一个副本
- public boolean startsWith(String prefix) : 判断当前串是否以参数中的子串为开始
- public boolean endsWith(String suffix) : 判断当前串是否以参数中的子串为结束, 简单判断文件类型
- public String[] split(String regex) : 把字符串以参数中的子串为切割器进行切割, 结果是多个子串, 切割器丢弃
* 字符串String : 内容不可改变的Unicode字符序列. 内部使用char[]来保存所有字符.
* 任何对于字符串的修改都会产生新对象.
* 0 2 9 13 19 26 32 36 38
* String s = " abcXYZ 123 我喜欢你, 你喜欢我吗? 我不喜欢你 qqzZZ ";
* s.charAt(5) => 'X', s.charAt(28) => '喜'
* 第一个参数是源数组对象, 第2个参数是源数组的开始下标, 第3个参数是目标数组对象, 第4个参数是目标数组的开始下村, 第5个参数是复制元素个数
System.arraycopy(value, 0, result, 0, value.length);
* public int compareTo(String anotherString) : 用于字符串比较
* public int indexOf(String s ,int startpoint): 找出参数中的子字符串s在当前字符串中首次出现的下标, 但是开始位置是指定的startPoint
* s.indexOf("喜欢", 15) => 20. s.indexOf("喜欢", 21) => 28. s.indexOf("喜欢", 29) => -1
* public int lastIndexOf(String s) : 找出参数中的子串在当前字符串中首次出现的下标, 从右向左进行搜索
* s.lastIndexOf("喜欢") => 28
* public int lastIndexOf(String s ,int startpoint)找出参数中的子串在当前字符串中首次出现的下标, 但是开始位置是指定的startPoint, 从右向左
* s.lastIndexOf("喜欢", 27) => 20,
* s.lastIndexOf("喜欢", 19) => 14, s.lastIndexOf("喜欢", 13) => -1
* s.endsWith("qqzZZ") => false
* s.substring(13, 17) => "我喜欢你" : 子串的长度 = 结束下标 - 开始下标
* public String substring(int startpoint) : 获取子串, 指定开始下标. 会取到最后.
* $public String replace(char oldChar,char newChar) : 替换当前串中所有的oldChar为newChar
* s.replace(' ', '#')
* s.replace("喜欢", "讨厌")
* public String replaceAll(String old,String new) : 替换当前串中所有的old为new, 支持正则表达式
* public String concat(String str) : 字符串连接, 和+一样效果
* String s1 = "abc";
* String s2 = s1.concat("yyy"); // "abcyyy"
* public String toUpperCase() : 变成大写字母
* public String toLowerCase() : 变成小写字母
* String s = "abc,yyy,我和你,qqq,oooo";
* String[] arr = s.split(",");
StringBuilder类
内容可以改变的Unicode字符序列,底层也是使用char[ ]来存储数据
是一个长度可以变化的,保存字符的容器(默认长度为16)
速度快、线程不安全
可以理解为可以改变的String
* 字符串 StringBuilder : 内容可以改变的Unicode字符序列, 底层也是使用char[]保存所有字符
* 简单的理解 它就是一个容器, 保存字符的容器. 长度是变化的.
* String s = "abc"
* s = s + 100;
* StringBuilder sb = new StringBuilder("abc");
* sb.append(100);
* new StringBuilder() => 内部创建一个容量为16的char[].
* new StringBuilder(100); => 内部创建一个容量为100的char[].
* new StringBuilder("abcd")
* StringBuilder append(...) 可以追加任意数据到字符串末尾, 不会产生新对象
* StringBuilder insert(int index, ...) 可以在指定下标index位置处插入新的内容, 可以是任意数据.
* StringBuilder reverse() 反转
* StringBuilder delete(int beginIndex, int endIndex) 删除一个区间, 从beginIndex开始到endIndex.
* void setCharAt(int index, char newCh) 替换指定下标处的字符为新字符
StringBuffer类
速度慢、线程安全
Date类 --(已过时)
Date中使用SimpleDateFormat来对日期进行格式化
y表示年、M表示月、d表示月中的日、H表示24小时的小时、m表示分钟、s表示秒、S表示毫秒、E表示星期
且格式化器,可以直接用来格式化毫秒
Calendar --(使用不方便)
这个类是抽象类,不可以直接new 对象,只能通过类中的静态方法(getInstance)来获取,
Calendar calendar= Calendar。getInstance ();
int year = calendar.get(Calendar。YEAR);获取年;
calendar。set(Canendar。YEAR,2008);通用设置,通过指定不同的参数,来设置不同的值
内部使用数组保存,月份有初入,存在致命问题,数据容易丢失,一经修改,无法撤销
LocalDate – (日期类 Java8)
LocalDate 日期
LocalTime 时间
LocalDateTime 日期时间
//根据指定参数创建日期对象
LocalDate of = LocalDate.of(2021,1,13);
//获取当前日期 当前日期
LocalDate date = LocalDate.now();
//用当前日期伴随指定值生成新日期 设置新日期
LocalDate date1 = date.withYear(2008).withMonth(8).withDayOfMonth(8);//2008-08-08
//用当前日期加上指定时间生成新日期 当前日期再过多久
LocalDate sumDate = date.plusYears(2).plusMonths(3).plusDays(3);//2023-04-16
//用当前日期减去指定时间生成新日期 当前日期过了多久
LocalDate minusDate = date.minusYears(3).minusMonths(3).minusDays(333);//2016-11-14
MATH类
这些工具类所提供的方法大多数都是静态方法,
使用案例:Math.random()
random()获取 【0,1)随机小数
round()四舍五入
Date = date.plusYears(2).plusMonths(3).plusDays(3);//2023-04-16
//用当前日期减去指定时间生成新日期 当前日期过了多久
LocalDate minusDate = date.minusYears(3).minusMonths(3).minusDays(333);//2016-11-14