第六章 常用类
1.String的实现原理,内存的存储方式
1.java中规定凡是双引号括起来的字符串,是不可变的。
2.字符串是存储在字符串常量池当中。
3.new对象的时候一定在堆内存开辟空间,再去指向常量池中的字符串。
4.String类重写了toString和equals方法。
String s1="abc";
s1中保存的不是字符串,而是字符串对象的内存地址。
2.String的构造方法
byte[] bytes={97,98,99}
String s="";
new String("");
new String(bytes);//abc
new String(bytes,1,2);//bc
new String(char[] chars);同理bytes
3.String的常用方法
1.char charAt(int index);
2.int compareTo(String otherString);1:相等,-1:前小后大,1:前大后小。
3.boolean "".contains("");
4.boolean "".endWith();
5.boolean "".startWith();
6.boolean "".equals"";
7.boolean "".equalsIgnore"";忽略大小写进行比较
8.byte[] getBytes();
9.int indexOf("");判断某个子字符串在当前字符串第一次出现的索引
10.last indexOf("");与上面相反
11.boolean isEmpty();
12.int length();
13.replace(old new);
14.String[] split("");
15.String subString(int beginIndex,int endIndex);左闭右开
16.Char[] toCharArray();
17.String toLowerCase();转换小写
18.String toUpperCase();转换大写
19.String trim();去除前后空白
20.String valueOf();将非字符串转换为字符串
4.StringBuilder StringBuffer的常用方法?以及和String的区别?
StringBuffer 底层:容量为16的字节数组,没有final修饰,可以进行扩容
优化:创建StringBuffer的时候,尽量给一个初始化容量,最好减少扩容次数。
StringBuilder 区别:StringBuffer前面有synchronized关键字修饰,表示在多线程环境下是安全的。
StringBuilder多线程不安全
5.八种基本数据类型对应的包装类
1.Integer为代表
将数字123转换为包装类型
Integer t = new Integer(123);
float f = t.floatValue();
引用数据类型转换基本数据类型(拆箱)
2.自动拆箱和自动装箱
引用数据类型--->基本数据类型(拆箱)
基本数据类型--->引用数据类型(装箱)
3.Integer、int、String三种类型的互相转换
Integer.MAX_VALUE获取最大值
Integer.MIN_VALUE获取最小值
String---->Integer
Integer t = Integer.valueOf("100");
Integer----->String
String a = String.valueOf(Integer对象);
String ----->int
int value = Integer.parseInt("1234");
int ----->String
String a = 1+"";
String.valueOf(1);
int ----->Integer
Integer a = Integer.valueOf(100);
Integer ----->int
intValue();
Integer----->二进制字符串
String a = Integer.toBinaryString(int a)
十进制----->十六进制(Object中的toString中的hascode用到)
String a = Integer.toHexString(int a);
十进制----->八进制
String a = Integer.toOctalString(int a);
自动装箱
Integer t = 100;
自动拆箱
int y = t;
Integer t1 = 128;
Integer t2 = 128;
t1==t2 //false;
Integer t3 = 127;
Integer t4 = 127;
t3==t4 //true;
原因:[-128,127]为了方便使用,早已在方法区整数型常量池(cache:也就是缓存机制)创建好。
缓存机制:优化大型项目的手段。
缺点:占用内存
优点:效率高
6.数字的处理
1.NumberFormat
//1.Date---->String
//日期格式化:SimpleDateFormat
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
String string = sdf.format(date);
System.out.println(string);
BigDecimal(财务数据)
//8.java.math.BigDecimal 引用数据类型 常用于财务
BigDecimal decimal = new BigDecimal(100);
BigDecimal decimal2 = new BigDecimal(200);
BigDecimal add = decimal.add(decimal2);
BigDecimal divide = decimal2.divide(decimal);
System.out.println(add);
System.out.println(divide);
7.日期处理
怎样获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
String string = sdf.format(date);
System.out.println(string);
怎样获取毫秒
//3.获取1970-01-01到系统当前时间毫秒
long currentTimeMillis = System.currentTimeMillis();
System.out.println(currentTimeMillis);//1635161664289
怎样进行日期格式化
//日期格式化:SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
String string = sdf.format(date);
System.out.println(string);
怎样将字符串日期转换成日期类型Date
//2.String----->Date
String time = "2088-08-08 08:08:08 888";
Date parse = sdf.parse(time);
System.out.println(parse);
8.枚举类型
枚举:是一种引用数据类型
enum 枚举类型名{
枚举值1,枚举值2
}
结果只有两种情况的建议使用布尔类型
超过两种的,可以一枚一枚列出来的建议使用枚举类型(颜色,四季等)
switch语句支持枚举
byte short int char 枚举 可以作为switch中的对象
9.随机数
//创建随机数对象
Random random = new Random();
//获取[0-4]的随机数
int num = random.nextInt(5);