1. String 字符串
String 声明为 final 的,不可被继承;
实现了 Serializable 接口:表示字符串是支持序列化的;实现了 Comparable 接口:表示 String 可以比较大小
String 内部定义了 final char[ ] value,用于存储字符串数据;
String 代表不可变的字符序列,简称不可变性;
a. 当字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的 Value 进行赋值;
b. 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的 Value 进行赋值;
c. 当调用 String 的 replace() 方法修改指定字符或字符串时,也需要重新指定内存区域赋值;
注:通过字面量(a = “xxx”)的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池里;
字符串常量池中是不会存储相同内容的字符串的;
2. String 的实例化方式:
方式一:通过字面量定义的方式(数据生命在方法区中的字符串常量池中)
方式二:通过 new + 构造器的方式(实例保存的地址值,是数据在堆空间中开辟空间以后对应的地址值)
3. 面试题:String s = new String("abc");方式创建对象,在内存中创建了几个对象?
两个:一个是堆空间中 new 结构,另一个是 char[ ]对应常量池中的数据“abc”;
4. 结论:
a. 常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量;
b. 只要其中有一个是变量,结果就在堆中;
c. 如果拼接的结果调用 intern() 方法,返回值就在常量池中;
5. String 与 char[ ]之间的转换
String ---> char[ ]:调用 String 的 toCharArray()
char[ ] ---> String:调用 String 的构造器(String str = new String(arr))
6. String 和 byte[ ]之间的转换
编码:String ---> byte[ ]:调用 String 的 getBytes();字符串 ---> 字节(看得懂 ---> 看不懂的二进制数据)
解码:byte[ ] ---> String:调用 String 的构造器;编码的逆过程,字节 ---> 字符串
7. java.lang.StringBuffer代表可变的字符序列(StringBuffer类)
String、StringBuffer、StringBuilder三者异同:
String:不可变字符序列,底层使用 char[ ] 存储;
StringBuffer:可变字符序列,线程安全,效率低;底层使用 char[ ] 存储;
StringBuilder:可变字符序列,线程不安全,效率高(不存在多线程,建议使用);底层使用 char[ ] 存储;
效率:StringBuilder > StringBuffer > String
8. 时间戳(System.currentTimeMillis(),返回当前时间与1970.1.1.00.00.00.000之间以毫秒为单位的时间差)
9. SimpleDataFormate的使用:对日期 Date 类的格式化和解析
10. Calendar日历类(抽象类)的使用
① 实例化
a. 创建其子类(GregorianCalendar)的对象;
b. 调用其静态方法 getInstance()
② 常用方法:set()、add()、getTime()、setTime();
11. LocalDate、LocalTime、LocalDateTime(常用)的使用
12. Instant:时间线上的一个瞬时点;
13. DateTimeFormatter类:格式化或解析日期、时间;
14. Java比较器(排序方式又两种:java.lang.Comparable 自然排序,java.lang.Comparator 定制排序)
正常情况下,只能用 ==、!=进行比较,但是开发时会对多个对象进行排序,需要比较对象的大小;
Comparable 接口的使用:
a. 像 String、包装类等实现类Comparable 接口,重写了CompareTo()方法,给出了比较两个对象的大小;
b. 重写了CompareTo(obj)规则:
如果当前对象this大于形参对象obj,则返回正整数;
如果当前对象this小于形参对象obj,则返回负整数;
如果当前对象this等于形参对象obj,则返回零。
c. 对于自定义类来说,如果需要排序,可以让自定义类实现 Comparable 接口,重写 CompareTo(obj) 方法;
在 CompareTo(obj) 方法中指明如何排序;
Compartor 接口的使用:
a. 当元素的类型没有实现 java.lang.Comparable 接口而又不方便修改代码;
或实现了java.lang.Comparable 接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序;
b. 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
如果方法返示 回正整数,则表示o1大于o2;
如果返回0,表示相等;
返回负整数,表示o1小于o2。
二者比较:
a. Comparable 接口的方式一旦一定,保证 Comparable 接口实现类的对象在任何位置都可以比较大小;
b. Compartor 接口属于临时性的比较;
标签:Comparable,Java,String,接口,char,days03,字符串,宋红康,常量 From: https://www.cnblogs.com/LinxhzZ/p/16747734.html