一.包装类
jdk1.5版本 提出新特性
自动装箱 自动拆箱
自动装箱 :自动的完成 基本数据类型 ->包装类的转化
自动拆箱: 包装类 ->基本数据类型
来看一个经常出现的面试题
Integer a = 100;
Integer b = 100;
System.out.println(a == b); //true
Integer c = 200;
Integer d = 200;
System.out.println(c ==d );// false
最本质的是基本数据类型的包装类中缓存问题
整数类型 -128 ~ 127
Byte Short Integer Long -128 ~ 127
Character 0~ 127 先转化为Int类型
Boolean true false
如果值在正常范围之内 底层就会从cache[] 数组中直接拿取
如果不在正常范围之内 底层会new 新对象出来
Integer a = 100;
//底层使用的是valueOf方法完成的转换
Integer a = Integer.valueOf(100);
包装类的作用:
1.提供了方法 属性
2.提供缓存
3.完成字符串->数字之间的转换
4.基本数据类型 <->包装类
二.数学相关的类
Math Random
获取0-40 之间的随机数
Random rd = new Random();
rd.nextInt(40);//包含0 但不包含40
三.时间相关的类
3.1系统时间
Date date1 = new Date(); // 传参数是以参数时间为基准
Date date2 = new Date();// 不传参数是以系统时间为基准
date1.before(date2); //判断日期1是不是在日期2之前
date2.after(date1); //判断日期2是不是在日期1之后 返回boolean 值
3.2日历相关
Calendar
底层用abstract 修饰 不能创建对象 要用实例化对象
Calendar calendar = Calendar.getInstance;
calendar.get(Calendar.YEAR);
3.3 SimpleDateFormat 类
完成时间和字符串之间的转化
Date date = new Date(); //获取系统时间
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化
System.out.println( simple.format(date));
//把字符串转换为时间类也可以
String time = "2019-07-21 13:10:57";
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simple.parse(time);
System.out.println(date);
四.String 类
常用方法:
“ 123 ”.getBytes 是将 字符串转换为一个byte[] 数组
比较两个字符串
String s1 = new String("abcd");
String s2 = new String("abcb");
System.out.println(s1.compareTo(s2)); // 2 返回的是Unicode 差值 从第一个字母开始逐个比较 遇到不同的就返回差值
concat 把两个字符串拼接到一起
String s3 = s1.concat(s2);
.endwith... 是否以...结尾
.startwith... 是否以...开始
indexOf ... 第一次出现的索引
lastIndexOf ... 最后一次出现的索引
replace(a,b) 把a字符替换为b字符
substring(a,b) 将字符串进行截取 从下标a开始b结束 不包含b
trim(); 取出两端的空格
toUpperCase 把小写转成大写
toLowerCase 把大写转成小写
split(“-”) 以- 进行查分 拆分完成后会变成若干个字符串 然后以数组的方式储存
String s1 = "1-2-3-4-3-2-3-3-2-9";
String[] ss = s1.split("-");
for (String string : ss) {
System.out.println(string);}
String 类面试题
String s1 = "hello";
String s2 = "hello";
String s3 = "he" + "llo";
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//true
String s4 = "he";
String s5 = s4 + "llo";
System.out.println(s1 == s5);//false
String s3 = "he" + "llo";字符串常亮拼接时 能直接拼成“hello”
String s5 = s4 + "llo"; 如果 + 两边有对象(引用) 就会创建新的对象
StringBuffer和StringBuilder
String 类 是一个不可变类
即 不管是拆分 还是截断 String 是不可变的
1.使用final 关键字进行了修饰
2.String类底层使用char[] 的数组来存放的
平时拼接字符串工作时记录日志
用StringBuffer和StringBuilder
1.
StringBuffer sbf = new StringBuffer();
for(int i = 0;i < 10;i++){
sbf.append("abcd"); //拼接
}
System.out.println(sbf);
2.
StringBuilder sbf = new StringBuilder();
for(int i = 0;i < 10;i++){
sbf.append("abcd");
}
System.out.println(sbf);
两者的区别:
1.用法相同
2.StringBuffer 是线程安全的 另外一个是不安全的
3.String a = “hello”;
a = a + “word”; //产生新对象
底层:
StringBuilder sbf = new StringBuilder();
sbf.append(a).append(“word”);
a = sbf.toString();
如果两边有变量 都会创建一个 StringBuffer或StringBuilder对象
String b = “hello” + ”word”;//在编译期间 进行字符串常量的拼接。