java学习笔记(十三) - 常用类
java学习笔记(十三) - 常用类
执笔一、包装类
1. 基本数据类型的包装类
- 八种基本数据类型相应的引用类型—包装类
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
2. 包装类和基本数据类型转换
2.1 int <——> Integer
2.1.1 手动装箱
在jdk5前为手动装箱和手动拆箱 装箱:基本数据类型 —> 包装类型;反之拆箱
1
2
3
4
5
6
7
8//基本数据类型 -----> 包装类型 [手动装箱]
int i = 10;
Integer i1 = new Integer(i);
Integer i2 = Integer.valueOf(i);
//包装类型 ------> 基本数据类型[手动拆箱]
Integer j = new Integer(99);
int j1 = j.intValue();
2.1.2 自动装箱
jdk5及以后进行自动装箱和自动拆箱,自动装箱底层调用 valueOf()方法
1
2
3
4
5int n2 = 200;
//自动装箱 int->Integer
Integer integer2 = n2;//底层调用的是 Integer.valueOf(n2);
//自动拆箱 Integer->int
int n3 = integer2;//底层调用 intValue()方法
2.2 String 和 包装类
2.2.1 包装类型 -> String
1 | //包装类型 -> String 类型 |
2.2.2 String - >包装类
1 | //String - >包装类 |
3. Integer类常用方法
1 | System.out.println(Integer.MIN_VALUE);//返回最小值 |
4. Character类常用方法
1 | System.out.println(Character.isDigit('a'));//判断是不是数字 |
二、String类
1. 定义
- String 对象用于保存字符串,也就是一组字符序列
- 字符串常量对象是用双引号括起来的字符序列,如”你好”
- 字符串的字符常用Unicode编码,一个字符(不区分字母还是汉字)占两个字节
- String 类常用的构造方法:
1 | String s1 = new String(); |
- String 是final类 不能被继承
- String 有属性 private final char value[]; 用于存放字符串内容
- value 是一个final类型,不能被修改:即value不能指向新的地址,但是单个字符内容可以变化
1 | String name = "jack"; |
2. 创建String 对象
2.1 直接赋值
1 | String s = "执笔"; |
- 先从常量池查看是否有”执笔” 数据空间,如果有,直接指向;没有就从新创建,然后指向。s最终指向的是常量池的空间地址
2.2 调用构造器
1 | String s2 = new String("执笔"); |
- 先在堆中创建空间,里面维护了value属性,指向常量池的执笔空间,如果常量池没有“执笔”,重新创建;如果有,直接通过value指向。最终指向的是堆中的空间地址
2.3 字符串的特性
- String 是一个final类,代表不可变的字符序列
字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的
intern()方法指向对应字符串的常量池
3. 常用方法
第一组
1 | equals //区分大小写,判断内容是否相等 |
1 | //1. equals 区分大小写,判断内容是否相等 |
第二组
1 | toUpperCase//转换成大写 |
1 | //1. toUpperCase转换成大写 |
三、StringBuffer
1. 介绍
- java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
- 很多方法与String相同,但StringBuffer是可变长度的
StringBuffer是一个者器
StringBuffer是final类
- 实现了Serializable接口,可以保存到文件,或者网络传输
- 继承了抽象类AbstractStringBulider,AbstractStringBulider属性char[] value 存放的字符序列
1 | //1. StringBuffer的直接父类是 AbstractStringBuilder |
2. String 和 StringBuffer对比
String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高
3. 构造器
1 | //1. 创建一个大小为16的char[] ,用于存放字符内容 |
4. String 和 StringBuffer互相转换
4.1 String —> StringBuffer
1 | //String --> StringBuffer |
4.2 StringBuffer —> String
1 | //StringBuffer ->String |
5. 常用方法
1 | 1) append//增加 |
1 | StringBuffer s = new StringBuffer("hello"); |
四、StringBuilder
1. 介绍
- StringBuilder 继承AbstractStringBuilder 类
- 实现了Serializable,说明StringBuilder对象是可以串行化(对象可以网络传输,可以保存到文件)
- StringBuilder 是final类,不能被继承
- StringBuilder 对象字符序列仍然是存放在其父类AbstractStringBuilder的 char[] vaLue;因此,字符序列是堆中
- StringBuilder 的方法,没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用
1 | StringBuilder stringBuilder = new StringBuilder(); |
2. String、StringBuffer、StringBuilder比较
- StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
2) String:不可变字符序列,效率低,但是复用率高
3) StringBuffer:可变字符序列、效率较高(增删)、线程安全
4) StringBuilder:可变字符序列、效率最高、线程不安全 - String使用注意说明:
- string s=”a”; //创建了一个字符串
- s += “b”; //实际上原来的” a”字符串对象已经丢弃了,现在又产生了一个字符串s+ “b” (也就是”ab”)。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能=>结论:如果我们对String做大量修改,不要使用String
3. String、StringBuffer、StringBuilder的选择
- 如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder
- 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
- 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
- 如果我们字符串很少修改,被多个对象引用,使用String, 比如配置信息等
五、Math类
- 包含执行基本数学运算的方法
1. 方法
1 | 1) abs//绝对值 |
1 | public class MathMethod { |
六、Arrays类
1. 方法
1 | //(1) toString 返回数组的字符串形式 |
1 | public class ArraysMethod02 { |
2. 排序
1 | public class ArraysSortCustom { |
七、System类
1. 方法
1 | (1) exit//退出当前程序 |
1 | //exit |
八、BigInteger BigDecimal类
- BigInteger适合保存比较大的整型
- BigDecimal适合保存精度更高的浮点型(小数)
1. 方法
1 | add//加 |
1 | BigInteger b1 = new BigInteger(" 1234567890"); |
九、日期类
1. 第一代日期类
- Date:精确到毫秒,代表特定的瞬间
- SimpleDateFormat:格式和解析日期的类,允许进行格式化(日期 - > 文本),解析(文本 - > 日期)和规范化
1 | public class Date01 { |
2. 第二代日期
- 主要是Calendar(日历)
1 | public abstract class Calendar extends Object implements Serializable, |
- Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY OF MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
1 | Calendar C = Calendar.getInstance(); //创建日历类对象//比较简单,自由 |
3. 第三代日期类
1. 方法
1 | (1) LocalDate//获取日期字段 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果