1、字符串相关类
- String
- StringbBuffer
-
String类
代表字符串
- String类是一个final类,代表不可变的字符序列,不能被继承
- 字符串是常量,用双引号引起来,它们在创建之后不能修改
- String对象的字符内容是存储在一个final的字符数组value[]中的,体现不可变性
- String 实现了Serializable 接口 可序列化
- String 实现了Comparable 接口 可比较大小
- String 内部定义了final char[] value 用于存储字符串
- 通过字面量的方式给一个字符串赋值,此时字符串值声明在字符串常量池中
- 字符串常量池中不会存在相同内容
1、例子:
```java
public class HelloWorld {
/*** 1.字符串常量和常量的拼接在常量池中.且字符串常量池中不会存在相同的常量* 2.只要有一个变量参与,字符串的计算结果就在堆空间中。* 3.如果计算的结果调用 intern 方法结果就在常量池中* @param args*/public static void main(String[] args) {String s1 = "hello";String s2 = "world";String s3 = "helloworld";String s0 = "hello"+ "world";System.out.println(s3 == s0);//trueString s4 = s1 + "world";System.out.println(s3 == s4);//falseString s5 = s4.intern();System.out.println(s3 == s5);//true}
}
<a name="jF2fG"></a>### 2、String的常用方法```javapublic class HelloWorld {/*** 1.字符串常量和常量的拼接在常量池中.且字符串常量池中不会存在相同的常量* 2.只要有一个变量参与,字符串的计算结果就在堆空间中。* 3.如果计算的结果调用 intern 方法结果就在常量池中* @param args*/public static void main(String[] args) {String s = "HelloWorld";//1.字符串的长度System.out.println(s.length());//2.字符串指定索引的字符System.out.println(s.charAt(1));//3.字符串转大写System.out.println(s.toUpperCase());//4.字符串转小写System.out.println(s.toLowerCase());//5.去除首尾空白字符串String s1 = " hello word ";System.out.println(s1.trim());//6.比较两个字符内容是否相等System.out.println("helloworld".equals(s));//7.比较两个字符内容是否相等 忽略大小写System.out.println("helloworld".equalsIgnoreCase(s));//8.字符串连接 等同于+System.out.println(s1.concat("xuezhiyi"));//9.字符串截取System.out.println(s.substring(2));//10.字符串截取 左闭右开System.out.println(s.substring(2,5));//11.字符串比较String s2 = "hello";String s3 = "world";System.out.println(s2.compareTo(s3));//12.以什么开始或者结尾System.out.println(s3.endsWith("ld"));System.out.println(s3.startsWith("wo"));System.out.println(s3.startsWith("rl",2));//13.包含字符串String s4 = "Hello";System.out.println(s.contains(s4));String s5 = "lol";System.out.println(s.indexOf(s5));//找不到返回-1}}
3、String StringBuffer StringBuilder 异同
- String 不可变的字符序列 底层使用 final char[]
- StringBuffer 可变的字符序列 线程安全的效率低 底层使用 char[]
- StringBuilder 可变的字符序列 线程不安全的效率高 底层使用 char[]
StringBuffer StringBuilder 超出长度会扩容为原来的2倍+2 将原来的数组copy到新的数组 ```java public class HelloWorld {
/**
@param args */ public static void main(String[] args) {
StringBuffer buffer = new StringBuffer(); buffer.append(‘a’); buffer.append(‘b’); buffer.append(‘c’); buffer.append(‘d’); System.out.println(buffer); buffer.replace(2,3,”eee”); System.out.println(buffer.charAt(1)); System.out.println(buffer.insert(1,”pppp”)); StringBuffer delete = buffer.delete(1, 2); System.out.println(delete);
}
}
> 效率 StringBuilder > StringBuffer > String<a name="nIlNv"></a>## 2、jdk8之前的日期类<a name="8v7wU"></a>### 1、System类获取毫秒时间戳 当前时间和1970年的时间差 毫秒为单位<br />long l = System._currentTimeMillis_();<a name="M1fkE"></a>### 2、java.util.Date;<a name="0PzjK"></a>#### 1、两个构造器的使用1. Date date = new Date(); 创建当前时间对应的时间的对象1. Date date1 = new Date(1626925140460L); 创建指定时间对应的时间对象<a name="Ldz3y"></a>#### 2、两个方法的使用1. toString() 返回年月日时分秒1. date.getTime();//返回当前对象的毫秒时间戳<a name="1Yq2U"></a>### 3、SimpleDateFormat<a name="TtZTx"></a>#### 格式化:日期转换成字符串<a name="9cmR8"></a>#### 解析:字符串转成日期```java//日期格式化 21-7-22 下午1:41Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = sdf.format(date);System.out.println(format);//日期解析 Thu Jul 22 13:38:00 CST 2021String mydate= "2021-51-22 13:51:09";Date parse = sdf.parse(mydate);System.out.println(parse);
练习1:
@Testpublic void test1() throws ParseException {//"2021-07-22" 转换成 java.sql.dateString date = "2021-07-22";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date parse = sdf.parse(date);java.sql.Date date1 = new java.sql.Date(parse.getTime());System.out.println(date1);}
