Java学习笔记二:常用类

本文是记录在尚硅谷学习java的一些笔记,因为刚开始写博客,可能大部分都是PPT的搬用,希望多多包涵,后续会继续更新,欢迎大家交流学习,如有不妥之处,欢迎多多评论

字符串相关的类:String

String的特性

  • String 类:代表字符串。Java程序中的所有字符串字面值(如“abc”)都读作为此类的实例实现
  • String是一个final类,代表不可变的字符序列
  • 字符串是常量,用双引号引起来表示。他们的值在创建之后不能更改。
  • String对象的字符内容是存储在一个字符数组value[]中的

String对象的创建

//字面量方式,直接在常量池创建char[]
String str = "hello";

//通过new+构造器
//本质上this.value = new char[0]
String s1 = new String();

//this.value = original.value;
String s2 = new String(String original);

//this.value = Array.copyOf(value,value.length);
String s3 = new String(char[] a);

String s4 = new S

面试题:String s = new String(“abc”);方式创建对象,在内存中创建了几个对象?
答:两个,一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:“abc”

字符拼接

String s1 = "123";
String s2 = "abc";
String s3 = "123abc";
String s4 = "123"+"abc";
String s5 = s1+"abc";
String s6 = "123"+s2;
String s7 = s1+s2;
s3 == s4 //true
s3 == s5 //false
s3 == s6 //false
s3 == s7 //false

String s8 = s5.intern();//返回值得到的s8使用的常量值中已经存在的"123abc"
s3 == s8 //true

总结:
1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量
2.只要其中有一个是变量,结果就在堆中
3.如果拼接的结果调用intern()方法,返回值就在常量池中

字符串相关的类:String常用方法

String常用方法1
String常用方法2
String常用方法3

String与基本数据类型转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意编码和解码的问题在这里插入图片描述

StringBuffer与StringBuilder

String、StringBuffer、StringBuilder三者的异同?
String:不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列、效率低、线程安全;底层使用char[]存储
StringBuilder:JDK5.0新增;可变的字符序列、效率高、线程不安全;底层使用char[]存储
注意:参数传递的话,方法内部String不会改变其值,StringBuffer、StringBuilder会改变其值

  • 源码分析
    String str = new String; //new charr[0];
    String str1 = new String("abc"); //new char[]{'a','b','c'};
    StringBuffer sb1 = new StringBuffer(); //new char[16]底层创建了一个长度16的数组
    sb1.append('a'); // value[0] = 'a'
    sb1.append('b'); // value[1] = 'b'
    StringBuffer sb2 = new StringBuffer("abc"); // char[] value = new char["abc".length+16]
    问题1:System.out.println(sb2.length()); //3
    问题2:扩容问题:如果要添加的底层数组盛不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。
    指导意义:开发中建议大家使用:StringBuffer(int capacity)或StringBuilder(int capacity)

StringBuffer类的常用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意StringBuilder的方法与StringBuffer类似

JDK8之前日期时间API

在这里插入图片描述
在这里插入图片描述
3. java.sql.Date对应着数据库中的日期类型的变量

-> 如何将java.util.Date对象转换为java.sql.Date

//情况一:
Date date1 = new java.sql.Date(12873618L); //多态
java.sql.Date date2 = (java.sql.Date)date1; //强转

//情况二:
Date date3 = new Date();
java.sql.Date date4 = new java.sql.Date(date3.getTime());

在这里插入图片描述

//按照指定的方式格式化和解析
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
String format = sdf.format(date);//2020-07-24 17:06:21
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)
sdf.parse("2020-07-24 17:06:21");//这里传入的String必须是实例化带参的格式

在这里插入图片描述

JDK8新日期时间API

LocalDate 、 LocalTime 、 LocalDateTime

在这里插入图片描述
在这里插入图片描述

瞬时Instant

在这里插入图片描述
在这里插入图片描述

格式化与解析日期或时间

在这里插入图片描述

//方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE_DATE
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:日期->字符串
LocalDateTime localDateTime = LocalDateTime.now();
String str1 = formatter.format(localDateTime);

//解析:字符串->日期
TemporalAccessor parse = formatter.parse("2020-07-24T21:21:21.234");

//方式二:
//本地化相关的格式。如ofLocalizedDateTime()
//FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT:适用于LocalDateTime
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
//格式化
String str2 = formatter1.format(localDateTime);

//本地化相关格式。如ofLocalizedDate()
//FormatStyle.FULL / FOrmatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT:适用于LocalDate
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
//格式化
String str3 = formatter.format(LocalDate.now());

//重点:方式三:自定义的格式。如ofPattern("yyyy-MM-dd hh:mm:ss E")
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss E");
//格式化
String str4 = formatter3.format(LocalDateTime.now());
//解析
TemporalAccessor parse1 = formatter3.parse("2020-07-24 21:35:23");

其他API

在这里插入图片描述

  • 与传统日期处理的转换
    在这里插入图片描述

Java比较器

  • 在 Java 中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题 。
  • Java 实现对象排序的方式有两种:
    -> 自然排序: java.lang.Comparable
    -> 定制排序: java.util.Comparator

自然排序

在这里插入图片描述
在这里插入图片描述

定制排序

在这里插入图片描述

Comparable和Comparator的适用比较
Comparable接口的方式一旦确定,保证Comparable接口实现类的对象再任何位置都可以比较大小
Comparator接口属于临时性的比较

System类

在这里插入图片描述
在这里插入图片描述

Math类

在这里插入图片描述

BigInteger 与 BigDecimal

BigInteger类

在这里插入图片描述
在这里插入图片描述

BigDecimal类

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值