1.String
1.1概述
java.lang.String:是字符串类,底层就是一个final修饰的char数组,所以String很多特性就是数组的特性,一旦确定,长度不能更改
1.字符串一旦创建,这个字符串对象不能再更改
2.为了提升字符串的访问和存储效率,java虚拟机采用了一种缓存机制,把字符串都保存在了字符串常量池中
3.在程序执行过程中,假如要用到一个字符串a String s1="a";先把字符串常量池中检索,是否有a,如果没有就创建一份,假如有了String s2="a";就不在创建,把已有的这个a返回
所以导致String s1="a" String s2="a" 此时使用s1==s2,他也是true,因为他们指向同一个字符串对象,就是a
1.2基本使用
String s1="a";
String s2="a";
System.out.println(s1.equals(s2)); 比较的值,true
System.out.println(s1==s2); 比较地址,false
如果使用了new的方式,那么会创建堆内存对象,该字符对象会保存在堆内存中
String s3=new String("a");
String s4=new String("a");
System.out.println(s3==s4); s3和s4不指向常量池,分别指向了堆内存,地址不同,为false
System.out.println(s3.equals(s4)); String中覆写了equals方法,比较值,所以是true
1.3构造方法
1.字节数组,只截取一部分,4表示起始下标(包含),2表示个数
String s4=new String(bytes,4,2);
System.out.println(s4);
2..字符数组,只截取一部分,1表示起始下标(包含),2表示个数
String s6=new String(chars,1,2);
System.out.println(s6);
1.4常用方法
1 char charAt (int index ) : 返回该字符串中,指定位置的字符
String s1 = "qwehihasd";
char c1 = s1.charAt(2);
System.out.println(c1); e
2 boolean endsWith(String suffix) : 判断该字符串是否以指定字符串结尾
boolean startsWith(String prefix) : 判断该字符串是否以指定字符串开始
System.out.println("Hi.money".endsWith(".money"));
System.out.println("Hi.money".startsWith("Hi"));
3 boolean equalsIgnoreCase(String str) : 不区分大小写比较两个字符串是否相等
System.out.println("abc".equalsIgnoreCase("ABC"));
4 byte[] getBytes() : 把字符串转换为字节数组并返回
byte[] bytes="abc".getBytes();
5 char[] toCharArray() : 把字符串转换为字符数组并返回
char[] chars="abc".toCharArray();
6 int indexOf(String str) : 获取该字符串中指定字符串的起始索引,找不到返回-1
System.out.println("aafavbwg".indexOf("fa")); 2
System.out.println("xaafzeaq".indexOf("fa")); -1
7 int indexOf(String str,int index) :
从指定位置开始查找(包含),获取该字符串中指定字符串的起始索引,找不到返回-1
System.out.println("acaafaz".indexOf("a",1)); 2
System.out.println("acaafaz".indexOf("b",1)); -1
8 index lastIndexOf(String str) : 同上,最后一次出现的索引 找不到返回-1
System.out.println("xafaawd".lastIndexOf("w")5 System.out.println("xevfgas".lastIndexOf("b"));-1
9 int length() : 返回该字符串的长度
System.out.println("aaxwa".length()); 5
10 String replaceAll(String regex . String replacement); 替换指定字符,支持正则表达式
String replace (String str . String replacement); 不支持正则表达式
System.out.println("adq.afa.aaxve".replaceAll(".",",")); ,,,, . 在正则表达式中,代表任意字符
System.out.println("adq.afa.aaxve".replace(".",",")); . 换成了,
可以用/转义
11 String[] split(String regex) : 分割字符串,返回字符串数组,支持正则表达式,注意 点,需要转义
System.out.println("adq.afa.aaxve".replaceAll("\\.",","));
System.out.println("adq.afa.aaxve".replace(".",","));
12 String substring(int begin);获取该字符串中,以某个下标起始的子字符串(包含)
System.out.println("abcdef".substring(2)); cdef
13 String substring(int begin, int end) : 获取该字符串中,以某个下标起始(包含)到某个下标结束的子字符串(不包含)
System.out.println("cjjdnshh".substring(2,4)); jd
14 String trim() : 去除字符串两边的空格
System.out.println(" a b fsba ");
System.out.println(" a b fsba ".trim());
15 String toUpperCase() : 转大写
String toLowerCase() : 转小写
System.out.println("xavq".toUpperCase());
System.out.println("XAVQ".toLowerCase());
16 static String valueOf(Object obj) :
调用该对象的toString方法,如果为null,则不再调用toString而是返回字符串null
打印一个引用类型的时候,会自动调用String的valueOf 所以 会自动调用toString方法
1.5注意
2.StringBuffer和StringBuilder
2.1概述
StringBuffer和StringBuilder:都是字符串缓冲区,可以做拼接操作
StringBuffer和StringBuilder和String区别:
String:底层是char数组,定长,一旦创建,不可更改,不适合做字符串拼接操作
StringBuffer和StringBuilder:底层是char数组,变长,预先在内存中申请一块空间,用来保存很多字符
如果预留空间不够了,会进行自动扩容
默认容量为16,扩大容量 (当前容量+1)*2 16->34->70
StringBuffer和StringBuilder的区别:StringBuffer线程安全,在多线程环境下,不会出现问题
StringBuilder非线程安全,在多线程环境下,可能会出现问题
2.2基本使用
append 添加数据,做拼接操作
StringBuilder sb=new StringBuilder();
String[] arr={"a","b","c"};
for(int i=0;i<arr.length;i++){
sb.append(arr[i]).append(",");
反转
sb.reverse();
获取已有元素个数
System.out.println(sb.length());
当前容量(数组长度)
System.out.println(sb.capacity());
toString可以把StringBuilder转换为String类型
String str=sb.toString();
System.out.println(str);
3.包装类
3.1概述
1. 装箱就是自动将基本数据类型转换为包装器类型
2. 拆箱就是自动将包装器类型转换为基本数据类型
3.2使用
基本类型
byte b1=12;
封装为包装类
Byte b2=new Byte(b1);
m1(b2);
public static void m1(Object o){}
3.3Integer
3.3.1基本使用
3.3.2相互转换
int-->Integer
Integer i1=new Integer(123);
i1=Integer.valueOf(123);
Integer-->int
int i2=i1.intValue();
String-->integer
Integer i3=new Integer("123");
i3=Integer.valueOf("123");
Integer-->String
String string=i3.toString();
int-->String
String string1="123+";
String-->int
重要 static int parseInt(String str):把纯数字的字符串转换为int类型
int i4=Integer.parseInt("123");
double d1=Double.parseDouble("2.4");
3.3.3常用方法
把数字以二进制的字符串形式,并返回
String s1=Integer.toBinaryString(10);
八进制返回
s1=Integer.toOctalString(10);
十六进制返回
s1=Integer.toHexString(10);
3.3.4自动装箱自动拆箱
java1.5新特性 自动装箱和自动拆箱
装箱:基本类型到包装类类型
拆箱:包装类类型到基本类型
八种包装类,都覆写了toString和equals()方法
1.5之前
Integer i1=Integer.valueOf(123);
int i2=i1.intValue();
1.5之后
Integer i3=123; 编译之后就等于 Integer i1=Integer.valueOf(123);
int i4=i3; 编译之后就等于int i4=i3.intValue();
3.3.5深入整型常量
Integer i5=12;
Integer i6=12; 编译之后Integer.valueOf(12);
System.out.println(i5 == i6); true 在-128~127都为true,范围外为相当于new新建对象,false
4. System
4.1概述
System类提供的public static long currentTimeMillis()用来返回当前时 间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适于计算时间差。
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。
由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。
成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流
(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
成员方法
native long currentTimeMillis():
该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时
间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
void exit(int status):
该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表
异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
4.2常用方法
5.Date
5.1概述
获取时间和时间操作
5.2构造方法
获取系统当前时间
Date d1=new Date();
传入毫秒数,获取时间原点到指定毫秒数的世界
Date d2=new Date(1000);
Sat Jan 15 13:10:02 CST 2022
System.out.println(d1);
Thu Jan 01 08:00:01 CST 1970
System.out.println(d2);
5.3常用方法
1642229103105
System.out.println(d1.getTime());
Sat Jan 15 14:45:24 CST 2022
System.out.println(d1.toString());
5.4 格式化
传入毫秒数,获取时间原点到指定毫秒数的世界
Date d2=new Date(1000);
获取指定时间毫秒数
System.out.println(d1.getTime());
获取系统当前时间
Date d1=new Date();
创建时间格式化对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");
格式化,返回字符串
String string=sdf.format(d1);
System.out.println(string); 2022年01月16日 10:43:11 603
时间格式的字符串转换为Date对象
String strDate="2022/01/14 14:21:36";
格式化对象的时间格式要和字符串的格式一致
sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
转换 返回Date对象
Date date=sdf.parse(strDate);
System.out.println(date);
5.5Calendar
6.Random
6.1使用