String,StringBuilder,StringBuffer直接的区别是:
String 不可变长的字符序列
StringBuilder 可变长的字符序列,线程不安全的,效率较高
StringBuffer 可变长的字符序列,线程安全的,相对效率较低
执行效率: StringBuilder>StringBuffer>String
推荐使用:
- String: 单线程,对字符串没有大量改变内容,灵活操作字符串推荐使用
- StringBuilder:单线程,对字符串进行大量的改动操作,推荐使用StringBuilder
- StringBuffer: 多线程,对字符串进行大量的改动操作,推荐使用StringBuffer
String
String s=new String();
System.out.println(s);//字符串可以被直接打印,对象和数组是不可以直接打印的
System.out.println(s.length()); //字符串中字符的个数
String(char [ ] value) 参数字符串数组的内容创建字符串
char[] arr={'a','b','c','d','e'};
String(char [ ] value, int offset, int count)获取参数字符数组中的某一部分创建字符串对象
String s2=new String(arr,1,3);
字节数组转为字符->字符编码格式问题(字符集合)
System.out.println("国".getBytes("UTF-8").length);
byte[] bytes="火影忍者".getBytes();
String(byte[] bytes, String charsetName) 指定字符编码格式进行转换
System.out.println(new String(bytes,"GBK"));
String(byte[] bytes, int offset, int lengthe)
System.out.println(new String(bytes,6,6));
String常用的常用方法
public static void main(String[] args) {
String s="heikoverygood";
String s1="Heikotverygood";
//索引
System.out.println(s.charAt(8));
//首位比较大小
System.out.println(s.compareTo(s1));
//字符串拼接
System.out.println(s.concat(s1));
//指定字符串是否是
System.out.println(s.contains("heik"));
//是否指定后缀结束
System.out.println(s.endsWith("good1"));
//是否指定前缀开始
System.out.println(s.startsWith("he"));
System.out.println("---------------");
char []arr=new char[4];
s.getChars(5, 9, arr, 0);//从第5个字符到第9个字符抽取到char这个数组上
System.out.println(arr);
// int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
System.out.println(s.indexOf("eiko",1));
System.out.println(s.lastIndexOf("v"));
//将e换成其他字母
System.out.println(s.replace("e", "E"));
System.out.println(s);
//根据指定分隔符分隔字符串
System.out.println(Arrays.toString(s.split("i")));
//截取第3-6个字符
System.out.println(s.substring(3,6));
//字符串变字符数组
System.out.println(Arrays.toString(s.toCharArray()));
//转成大写
System.out.println(s.toUpperCase());
//去除前后空格
System.out.println(" 哈哈哈哈哈 ".trim());
//参数转换成字符串
System.out.println(String.valueOf(123));
}
StringBuilder 常用方法
public static void main(String[] args) {
//StringBuilder() 默认构建初始容量为16个大小
StringBuilder sb=new StringBuilder();
//容量大小
System.out.println(sb.capacity());
//sb.append(false) 追加
StringBuilder sb2=sb.append(false);
System.out.println(sb==sb2);
sb.append("abcd");
System.out.println(sb);
//删除5-8位的字符
sb.delete(5, 8);
System.out.println(sb);
//第5位插入"Yes"
sb.insert(5, "Yes");
System.out.println(sb);
//前后字符反转,顺序颠倒
sb.reverse();
System.out.println(sb);
//返回一个字符串,表示这个序列中的数据。
System.out.println(sb.toString());
}
包装类
int 的包装类是 Integer
char 的包装类是 Character
转换问题: 自动拆装箱
自动装箱: 从基本类型—>包装类型
自动拆箱: 从包装类型—>基本类型
有了int为什么包装类型Integer?
- Integer类,类中提供很多功能,可以灵活操作数据
- 容器等内部只能存储引用数据类型的数据,自动装箱使用可以的非常灵活
- 从数据库中拿到的数据库
有了Integer为什么还要int??
引用数据类型存储对象类型数据,new的数据在堆中,对象数据比较消耗资源,考虑效率问题使用基本数据类型更合适
Date 类
类Date代表一个特定的瞬间,毫秒精度; java.util.Date 包下的日期类
public static void main(String[] args) throws ParseException {
Date date=new Date();
System.out.println(date);
//获得毫秒
long l=date.getTime();
System.out.println(l);
Date date2=new Date(1578643898755L);
System.out.println(date2);
System.out.println(date.before(date2));
System.out.println(date.toString());
System.out.println("-------------------------------");
//日期格式转换
SimpleDateFormat Simple=new SimpleDateFormat();
SimpleDateFormat simple2=new SimpleDateFormat("yyyy年MM月dd日 E a hh:mm:ss");
Date date3=new Date();
//format(Date) 日期对象转为字符串
System.out.println(simple2.format(date3));
//parse(String) 字符串转为日期对象
Date s=simple2.parse("2020年01月10日 星期五 下午 04:35:29");
System.out.println(s);
}
控制台:
Fri Jan 10 20:25:57 CST 2020
1578659157249
Fri Jan 10 16:11:38 CST 2020
false
Fri Jan 10 20:25:57 CST 2020
-------------------------------
2020年01月10日 星期五 下午 08:25:57
Fri Jan 10 16:35:29 CST 2020
其中H代表24小时制的小时, M代表月份, S代表毫秒
枚举类
枚举类: 定义一种事物的所有可能
java所有中的枚举类都隐式的继承自java.lang.Enum
定义枚举类,不适用class,使用enum关键字定义
枚举类中的字段,相当于当前枚举类型的一个实例
枚举类中的字段,相当于class类中被 public static final修饰
import java.util.Arrays;
public class EnumDemo001 {
public static void main(String[] args) {
Week w=Week.SUNDAY;
System.out.println(w.name());//获取枚举类型引用存储的枚举字段值
System.out.println(w.ordinal());//枚举类中的字段索引位置
//获取枚举中所有的字段值,返回一个数组
Week [] arr=w.values();
System.out.println(Arrays.toString(arr));//需要导包
switch(w){//switch可以使用枚举
case MONDAY:
System.out.println("星期一");
break;
case TUESDAY:
System.out.println("星期二");
break;
case SUNDAY:
System.out.println("星期天");
break;
}
}
}
enum Week{
MONDAY,TUESDAY,SUNDAY;//也可以竖着写
}
控制台:
SUNDAY
2
[MONDAY, TUESDAY, SUNDAY]
星期天