目录
JAVA1.6—1.8版本 常量池-perm的位置(内存解析)
StringBuffer 、Stringbuilder 和 String
类Stringbuffer和 类Stringbuilder的常用方法
LocalDate , LocalTime , LocalDateTime的使用
此笔记包含
1 | 字符串相关类 |
2 | JDK8之前的时间日期 |
3 | JDK8中新时间日期API |
Stirng类
String的新特性
String的说明
String:字符串,使用一对” “引起来表示。
1.String声明为final的,不可被继承。
2.String实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable接口,表示String可以比较大小。
3.String内部定义了final char[ ] value用于存储字符串数据。
4.String:代表不可变序列。简称:不可变性。
体现:1.当对字符串重新赋值时,需要重新写指定区域赋值,不能使用原有的
value进行赋值。
2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,
不能使用原有的value赋值。
3.当调试String的replace()方法修改指定字符或字符串时,也需要重
新指定内存区域中存放的值。
5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串声明在字符
串常量池中(new的方式是放在堆空间中)。
6.字符串常量池中是不会存储相同内容的字符串的。
String的实例化方式
//方式一:通过字面量的方式
String str = "string";
//方式二:通过new + 构造器
String str = new String("stirng");
字符串的连接(及内存分析)
结论:
1.常量与常量拼接结果在常量池中。且常量池中不会存在相同的常量。
2.只要其中有一个是变量,结果就在堆中。
3.如果拼接的结果调用intern()方法,返回值就在常量池中。
JAVA1.6—1.8版本 常量池-perm的位置(内存解析)
一道面试题(理解String的不可变性)
String的常用方法
String与包装类,基本数据类型的转换方法
String – – >基本数据类型,包装类:调用包装类的静态方法:parseXxx(str)
基本数据类型,包装类 – – > String: 调用String重载的valueOf(xxx)
String和hcar【】型数组的转化
String —àchar[]:调用String的toCharArry()
String str = "string_Test"
char[] charArray = str.toCharArray();
Char[] —àString:调用String的构造器
char[] charArr = new char[]{'t','e','s','t'};
String str = new String(charArr);
String和字节Byte之间的转化
编码:String – ->byte[]:调用String的getBytes();
解码:byte[ ] – ->String:通过调用String构造器。
说明:编码和解码使用的字符集要一致,否则会出现乱码的情况
StringBuffer 、Stringbuilder 和 String
三者的异同
String:不可变序列
Stringbuffer:可变的字符序列:线程安全的,效率低
Stringbuilder:可变的字符序列:jdk5.0新增,线程不安全,但效率高
Stringbuffer,Stringbuilder:在底层创建一个长度为16的char型数组
三者的效率对比
Stringbuilder > Stringbuffer > String
类Stringbuffer和 类Stringbuilder的常用方法
JAVA关于时间日期的API
JDK1.8 之前日期和时间的API
JAVA.lang.System类
@Test
public void test1(){
long l = System.currentTimeMillis();
System.out.println(l); //返回值:1659785492214
}
JAVA中两个Date类的使用
java.util.Date类
|—-java.sql.Date类
java.util.Date类
1.两个构造器的使用
>构造器一:Date( ):创建一个对应当前时间的Date对象
>构造器二:创建指定毫秒数的Date对象
2.两个方法的使用
>toString( ):显示当前的年、月、日、时、分、秒
>getTime( ):获取当前Data对象对应的毫秒数。(时间戳)
Java.sql.Date类—-数据库Date类
Sql_Date – ->util_Date
创建参数为utilDate对象调用的gettime()方法的值的sql_Date对象
Java.text.SimpleDateFormater类
使用空参的创建对象
创建对象后,Format和parse都应该遵循默认的时间格式
使用带参的构造器—自定义时间格式
java.util.Date转换成java.sql.Date
Calendar 日历类—具有可变性
实例化
方式一:创建其子类对象(因为Calendar是抽象类)
方式二:调用其静态方法:getinstance( );
常用的方法:
get() 、set()
add()
getTime() ,setTime
设置自定义格式的时间,setTime接收的格式为:Date
JDK1.8以后新的日期时间类
新时间类出现的背景:
JDK8之前的日期时间类存在的问题
可变性:像日期和时间这样的类应该时不可变的。
偏移性:Date中的年份是从1900年开始的,而月份都是从0开始的。
格式化:格式化只对Date有用,Calendar则不行。
此外,他们是线程不安全的;不能处理闰秒等。
偏移量问题解读:
调用此构造器设置年月日时,年份需要减去1900,月分=份需要减去1 ,年份和月份
才会显示正常。
不然会出现以下情况
输出结果如下(明显是错误的):
LocalDate , LocalTime , LocalDateTime的使用
常用方法:
实例化方式一(now() ):
控制台输出如下:
实例化方式二(of() ):
控制台输出如下:
常用方式实现:
get()获取
with()修改
plus()增加
minus()减少
常用类—Instant(瞬时)
Instant常用方法
Instant的实例化
控制台输出结果:
我当前输出的时间为:20:17:15
发现慢了8个小时 – – – – – 原因:Instant获取的时间是本初子午线的时间
时区图:
解决偏移量的问题
增加对应偏移量使时间正确操作:atoffset
输出结果为(发现时间已正确):
toEpochMilli方法
利用毫秒数创建实例
DateTimeFormatter—格式化日期时间
和SimpleDateFormatSimpleDateFormatSimpleDateFormat不同的是,DateTimeFormatter不但是不变对象,它还是线程安全的。
可以看成SimpleDateFormatter的升级版。
DateTimeFormatter常用方法
DateTimeFormatter三种使用方式:
异同:三种方式的日期时间格式不一样。
方式一:预定义格式
方式一的格式化和解析
方式二:本地相关格式—日期时间
(注意看代码注释)
方式二格式化和解析
方式二的另一种格式—仅日期
方式三:用户自定义格式(开发中常用)
(E 表示星期)
其他关于时间的API
Java比较器
说明:Java中的对象,正常情况下,只能进行比较:== 或 != 。 不能使用 > 或 < 。
但是在开放场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
如何实现呢?使用两个接口中的任意一个:Comparable 或 Comparator 接口。
Comparable接口的使用举例:
1.像String、包装类等实现了Comparable接口,重写了comparaTo(obj)方法,给出了比较两个对象的方法。
2.像Stirng,包装类重写了compareTo()方法后,进行了从小到大的排序
3.重写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数。
如果当前对象this小于形参对象obj,则返回负整数。
如果当前对象this等于形参对象obj,则返回零。
自然排序:
重写Compareto()方法
* 重写后此类方可使用Arrays.sort()方法比较大小并排序
*需要同时重写toString()方法
*toString方法alt+enter自动生成
举例
商品类属性
重写的Compareto()方法(没使用泛型的情况)
排序后调用
Comparator(定制排序)
定制规则比较compare
System类
Math类
BigInteger类
BigInteger类常用方法:
BigDecimal类
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154592.html