String类
实例化
背景:字面量,常量和变量之间的区别?_字面量常量-CSDN博客
字符串常量都存储在字符串常量池中,池中不允许存放两个相同的字符串常量,jdk7之后存放在堆
String不可变的特性:
>对字符串变量重新赋值时会新开辟一个位置
>对字符串修改时会新开辟位置
String s1="Hello";
String s2=new String("Hello");
(s1==s2).sout//false
这里实际上new了两份对象,一个是堆空间中new的对象,一个是在字符串常量池中生成的字面量,只不过其中value属性值都指向常量池”Hello"的地址值。
字符串操作
常量+常量:存储在字符串常量池中,返回字面量地址 。(注:此时常量可能是字面量,也可能是final修饰的变量)
常量+变量,变量+变量:返回堆空间中新new的字符串对象的地址
intern()返回的是字符串常量池中字面量的地址
concat()始终返回新new的对象
构造器
1基本数据类型与String间转换
@Test
public void test1(){
int num=10;
String s1=num+"";
String s2=String.valueOf(num);
String s3="123";
int i=Integer.parseInt(s3);
}
String与char[]转换
@Test
public void test2() {
String str = "hello";
char[] arr=str.toCharArray();
String str1=new String(arr);
}
String与byte[]之间的转换
UTF-8中,一个汉字占用3个字节,一个字母占用1个字节
GBK中,一个汉字占用2个字节,一个字母占用1个字节
@Test
public void test3(){
String str=new String("hello");
byte[] arr=str.getBytes();
}
常用方法
isEmpty():判断是否为空
length():判断字符串长度
String concat:拼接
boolean equals:区分大小写
boolean equalsIgnoreCase:忽略大小写
int compareTo:
int compareToIgnoreCase:
String toLowerCase()
String trim():去掉字符串前后空白符
查找
boolean contains()
/没找到返回-1
int indexOf()
int lastIndexOf()
字符串提取
String subString()
和字符相关
char charAt()
char[] toCharArray()
static String valueOf():返回指定数组中表示该字符序列的String
startsWith()
替换
replace()
补充
String:不可变的字符序列
StringBuffer:可变的字符序列;线程安全
StringBuilder:可变的字符序列;线程不安全
常用方法
增:append()
删:delete(int start,int end)
deleteChatAt(int index)
改:replace(int start,int end,String str)
setCharAt(int index,char c)
查: charAt(int index)
插: insert(int index,xxx)
reverse(),length()
Date类
JDK8之前
currentTimeMillis:当前时间与1970年1月1日0时0分0秒之间的毫秒数,常用来计算时间差
import java.util.Date;
public class DateTest {
@Test
public void test1(){
Date date1=new Date();
System.out.println(date1.toString());
System.out.println(date1.getTime());
Date date2=new Date(1708933920941L);
System.out.println(date2.toString());
}
}
@Test
public void test2(){
java.sql.Date date1=new java.sql.Date(1708933920941L);
System.out.println(date1.toString());
}
日期时间的格式化和解析
默认格式化和解析
@Test
public void test3(){
SimpleDateFormat simpleDateFormat=new SimpleDateFormat();
Date date1=new Date();
String strDate=simpleDateFormat.format(date1);
System.out.println(strDate);
try {
Date date2 = simpleDateFormat.parse(strDate);
System.out.println(date2);
} catch (ParseException e) {
e.printStackTrace();
}
}
Calender:抽象类
实例化
Calendar calender=Cale.getInstace();
JDK8中新的API:
1.本地日期时间:LocaDate/LocalTime/LocalDateTime
造对象:
@Test
public void test6(){
LocalDate localDate = LocalDate.now();
LocalTime localTime=LocalTime.now();
LocalDateTime localDateTime=LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
//获取指定时间
LocalDate localDate1 = localDate.of(2024, 2, 26);//无偏移量
System.out.println(localDate1);
}
以上都没有用,这节直接用尚硅谷笔记查阅就可以 , 需要多写代码才能记住,记在这里没有用。
比较类
1.自然排序:实现comparable接口
2.定制排序: Comparator接口,创建实现类并传入到参数位置比如Arrays.sort
需求:源码无法修改,不想按照默认排序方式
按照反的标准排序,直接在返回值之前加“-”,负号