文章目录
String类
StringBuilder与StringBuffer
StringBuilder可变长字符序列 , 线程不安全 ,单线程下大量操作字符串推荐使用
StringBuffer 可变长字符序列 , 线程安全的 ,多线程下大量操作字符串推荐使用
执行效率:
StringBuilder > StringBuffer > String
方法
以下以StringBuilder为例:
1、构造一个字符串构建器,其中不包含任何字符,初始容量为16个字符
StringBuilder()
2、构造一个字符串构建器,其中没有字符,并且具有 capacity参数指定的初始容量。
StringBuilder(int capacity)
注意:能够确定容量的情况下可以选择使用StringBuilder
3、修改原串:将 boolean参数的字符串表示形式追加到序列中
StringBuilder append(boolean b)
注意:
扩容机制: int newCapacity = (oldCapacity << 1) + 2; 为原容量的2倍+2
4、删除此序列的子字符串中的字符,结束索引不包含
StringBuilder delete(int start, int end)
5、将字符串插入此字符序列
StringBuilder insert(int offset, String str)
6、导致此字符序列被序列的反向替换
StringBuilder reverse()
Math
数据相关的类,是个静态工厂
算术计算
Math.sqrt()
: 计算平方根Math.cbrt()
: 计算立方根Math.pow(a, b)
: 计算a的b次方Math.max( , )
: 计算最大值Math.min( , )
: 计算最小值Math.abs()
: 取绝对值
例:
System.out.println(Math.sqrt(16)); // 4.0 System.out.println(Math.cbrt(8)); // 2.0 System.out.println(Math.pow(3, 3)); // 27.0 System.out.println(Math.max(3.3, 4.6));// 4.6 System.out.println(Math.min(3.3, 4.6));// 3.3 System.out.println(Math.abs(-10.8)); // 10.8 System.out.println(Math.abs(10.2)); // 10.2
进位
Math.ceil()
: 天花板的意思,就是逢余进一Math.floor()
: 地板的意思,就是逢余舍一Math.rint()
: 四舍五入,返回double值。注意.5的时候会取偶数Math.round()
: 四舍五入,float时返回int值,double时返回long值
例:
System.out.println(Math.ceil(-10.1)); // -10.0 System.out.println(Math.ceil(10.7)); // 11.0 System.out.println(Math.floor(-10.1)); // -11.0 System.out.println(Math.floor(10.7)); // 10.0 System.out.println(Math.rint(10.1)); // 10.0 System.out.println(Math.rint(10.7)); // 11.0 System.out.println(Math.rint(11.5)); // 12.0 System.out.println(Math.rint(10.5)); // 10.0 System.out.println(Math.rint(10.51)); // 11.0 System.out.println(Math.round(10)); // 10 System.out.println(Math.round(10.1)); // 10 System.out.println(Math.round(10.7)); // 11 System.out.println(Math.round(10.5)); // 11 System.out.println(Math.round(10.51)); // 11
随机数
Math.random()
: 取得一个[0, 1)范围内的随机数
公式:
随机整数:[min,max]
(int)(Math.random() * (max-min+1) + min)
例:
//[5,12]的随机整数 (int)(Math.random() * (12-5+1) + 5)
包装类
Java有8种基本数据类型:整型(byte、short、int、long)、浮点型(float、double)、布尔型boolean、字符型char。
相对应地,Java提供了8种包装类Byte、Short、Integer、Long、Float、Double、Boolean、Character。包装类创建对象的方式就跟其他类一样。
基本数据类型 | 对应包装类 | 名称 |
---|---|---|
byte | Byte | 字节型 |
short | Short | 短整型 |
int | Integer | 整型 |
long | Long | 长整型 |
float | Float | 单精度 |
double | Double | 双精度 |
char | Char | 字符型 |
boolean | Boolean | 布尔型 |
1、包装类是类,类中可以定义成员,增强使用能力(成员变量,成员方法…)
2、类似集合,要求只能存储引用数据类型的数据
3、基本数据类型与引用数据类型的默认值(null)
为什么存在包装类还要保留基本数据类型???
基本数据类型比引用数据类型更节省内存空间,存在性能优势
自动拆装箱机制
将基本类型和包装类进行自动的互相转换
自动装箱
基本数据类型——> 包装类
每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中
例:
int i = 1; Integer in = i;
自动拆箱
包装类 ——> 基本数据类型
每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()和
doubleValue()方法
例:
Integer in = 1; int i = in;
相关方法:
1、返回整数参数的字符串表示形式,作为基数为2的无符号整数
static String toBinaryString(int i)
2、返回整数参数的字符串表示形式,作为基数为16的无符号整数
static String toHexString(int i)
3、返回整数参数的字符串表示形式,作为基数为8的无符号整数
static String toOctalSting(int i)
4、将字符串参数解析为带符号的十进制整数
static int parseInt(String s)
5、将字符串参数解析为带符号的十进制整数
static int parseInt(String s, int radix)
比较问题
==
基本数据类型——>数据值
引用数据类型——>地址值
例:
int i1 = 127;
int i2 = 127;
Integer i3 = 127;
Integer i4 = 127;
Integer i5 = new Integer(127);
Integer i6 = new Integer(127);
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i1==i2); //true
System.out.println(i3==i4); //true
System.out.println(i1==i3); //true
System.out.println(i5==i6); //false
System.out.println(i1==i6); //true
System.out.println(i3==i6); //false
System.out.println(i7==i8); //false
注意:
1、两个基本数据类型int比较,只要数据值相等就相等。i1与i2
2、两个new Integer() 比较,肯定不相等,因为new每个对象堆内存中地址不同。i5与i6
3、Integer与new Integer比较肯定不相等,因为new 不同的地址。i3与i6
4、基本数据类型int与Integer|new Integer比较,如果数据值相等肯定相等,
因为包装类会发生自动拆箱,然后比较数据值。i1与i3、i1与i6
5、两个Integer比较,在缓冲区范围[-128,127]之间就相等,同一个缓冲区对象,如果在范围之外就不相等。i3与i4、i7与i8
Integer缓冲区对象能够表示的数据范围:[-128,127]
String初始化的注意事项:
String str = "abc";
//创建了1个对象str,在堆中,"abc"在字符串常量池中
String str2 = new String("haha");
//创建了2个对象str2和new,"haha"在字符串常量池中
String str3 = new String("abc");
//创建了1个对象str,因为"abc"已经在字符串常量池中直接使用
枚举类 enum
JDK1.5引入了新的类型,同时可以使用switch语句
是类,当能够确定一种事物的所有可能,一个类型的所有对象的时候可以使用
java中所有的枚举类型都会隐式的继承自java.lang.Enum,这是所有Java语言枚举类型的公共基类。
枚举类中的字段,就为做当前枚举类型的一个实例存在,默认被 public static final修饰
定义:
enum 枚举名{}
方法:
1、获取枚举实例的字段名
name()
2、获取实例在枚举类中的序号(从0开始)
ordinal()
3、获取当前枚举类的所有实例
values()
日期类型
Date
Date类表示特定的时刻,精度为毫秒
1、Date() 分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒
Date date = new Date();
2、返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数
getTime()
3、分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。
Date(long date)
4、测试此日期是否在指定日期之后
after(Date when)
5、测试此日期是否在指定日期之前
before(Date when)
6、将此Date对象转换成以下形式的String
toString()
SimpleDateFormat
格式日期转换器
可以实现日期与字符串之间的转换问题
SimpleDateFormat s = new SimpleDateFormat();
默认格式:
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
一些常见的标记:
年 yyyy
月 MM
日 dd
时 HH
分 mm
秒 ss
毫秒 SSS
format()
将日期对象转换成字符串
例:
System.out.println(s.format(data));
parse()
将字符串转换为日期对象
例:
String datestr = "2021-06-11 17:22:22"; System.out.println(s.parse(datastr));