Java08-字符串和包装及日期类

1 Object

所有对象的顶级父类,存在于java.lang包中,这个包不需要我们手动导包

1.1 常用方法

boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
int hashCode()
返回该对象的哈希码值。
String toString()
返回该对象的字符串表示。

toString()

默认返回 类名@地址 的格式,来展示对象的地址值
如果想看属性值我们可以重写这个方法,重写后返回的就是把属性值拼接成一个字符串

equals(Object obj)

当前对象和参数对象比较大小,默认是比较内存地址,如果要比较对象的属性,可以重写该方法

hashCode()

返回该对象的哈希码值

2 String

字符串对象

2.1 特点

  • 是一个封装char[]数组的对象
  • 字符串不可变
    在这里插入图片描述

2.2 创建String对象

2.2.1 方式一:直接创建

常量池里直接创建对象(本质还是char[]),再次使用相同内容,会去常量池中找到已经存在的对象,不会新建

String str = "abc";

1、 如果是第一次使用字符串,java会在字符串常量池创建一个对象。
2、 再次使用相同的内容时,会直接访问常量池中存在的对象。

2.2.2 方式二:关键字和构造方法创建

new String(char[])
其实字符串底层维护了一个char[]

char[] c = {'a','b','c','d'};
String s = new String(c);//堆中分配新的内存
System.out.println(s); 

2.2.3 创建对象的比较

String s2="abcd";//常量池中分配新的内存
char[] c = {'a','b','c','d'};
String s = new String(c);//堆中分配新的内存
System.out.println(s==s2);//地址不同
System.out.println(s.equals(s2));//内容相同                         
//如果使用过了就不再创建,引用存在的对象
String s3="abcd";//访问常量池中已经存在的对象
System.out.println(s3==s2);//true

2.3 字符串连接效率

利用String类,在做字符串拼接的过程效率极其

String s1="aaa";
String s2="bbb";
String s3="ccc";
String s4=s1+s2+s3;//字符串不可变,每次加会创建新对象

2.4 常用方法

  • length();

int 返回此字符串的长度

  • charAt();

char 返回指定索引处的 char 值

  • lastIndexOf();

int 返回指定字符在此字符串中最后一次出现处的索引

  • substring();

String 返回一个新的字符串,它是此字符串的一个子字符串`

  • equals();

boolean 将此字符串与指定的对象比较

  • startsWith();

boolean 测试此字符串是否以指定的前缀开始

  • endsWith();

boolean 测试此字符串是否以指定的后缀结束

  • split();

String[] 根据给定正则表达式的匹配拆分此字符串

  • trim();

返回字符串的副本,忽略前导空白和尾部空白

3 StringBuilder/StringBuffer

3.1 特点

1、 封装了char[]数组
2、 是可变的字符序列
3、 提供了一组可以对字符内容修改的方法
4、 常用append()来代替字符串做字符串连接
5、 内部字符数组默认
初始容量是16

6、 如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。int newCapacity = value.length * 2 + 2
7、 StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全

3.2 方法

  • append()
    将指定的字符串追加到此字符序列
  • charAt()
    返回此序列中指定索引处的 char 值

3.3 StringBuilder和StringBuffer的区别

1、 在线程安全上,
–StringBuffer是旧版本就提供的,线程安全的。@since JDK1.0
–StringBuilder是jdk1.5后产生,线程不安全的。@since 1.5
2、 在执行效率上,StringBuilder > StringBuffer > String
3、 源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了同步关键字,使得程序可以保证线程安全问题。
在这里插入图片描述

4 包装类

4.1 与基本类型的对应关系

在这里插入图片描述

4.2 Number

数字包装类的抽象父类
在这里插入图片描述
常用的方法
在这里插入图片描述

4.3 以Integer/Double为例

4.3.1 新建对象

注意:
在Integer类中,包含256个Integer缓存对象,范围是 -128到127
使用valueOf()时,如果指定范围内的值,访问缓存对象,而不新建;如果指定范围外的值,直接新建对象

new Integer(5);新建对象
Integer.valueOf(5);//和 new 没有区别
new Double(3.14);
Double.valueOf(3.14);

4.3.2 方法

Integer.parseInt(String s);//字符串转换成int
Double.parseDouble(String s);//字符串转换成double

4.4 自动装箱和自动拆箱

自动装箱:把基本类型包装成一包装类的对象
Integer a = 5;//a是引用类型,引用了包装对象的地址。
编译器会完成对象的自动装箱:Integer a = Integer.valueOf(5);

自动拆箱:从包装对象中,自动取出基本类型值
int i = a;//a现在是包装类型,没法给变量赋值,需要把5取出来。
编译器会完成自动拆箱:int i = a.intValue();

5 日期类Date

5.1 概述

存在于java.util.Date包。用来封装一个毫秒值表示一个精确的时间点。
从1970-1-1 0点开始的毫秒值

5.2 创建对象

new Date();封装的是系统当前时间的毫秒值
new Date(900000000000L);封装指定的时间点

5.3 常用方法

  • getTime():取内部毫秒值
  • setTime():存取内部毫秒值
  • getMonth():获取当前月份
  • getHours():获取当前小时
  • compareTo(Date):当前对象与参数对象比较。当前对象大返回正数,小返回负数,相同0。
public static void main(String[] args) {
              Date d = new Date();
              System.out.println(d);//输出当前时间
              System.out.println(d.getTime());//输出1970-1-1至今的毫秒值
              System.out.println(d.getMonth());//获取当前月份
              System.out.println(d.getHours());//获取当前小时
       }

6 日期工具SimpleDateFormat

6.1 概述

日期格式化工具,可以把Date对象格式化成字符串,也可以日期字符串解析成Date对象

6.2 创建对象

new SimpleDateFormat(格式)
格式:yyyy-MM-dd HH:mm:ss
MM/dd/yyyy

6.3 常见方法

format(Date):把Date格式化成字符串
parse(String):把String解析成Date

6.4 案例:计算存活天数

 public static void main(String[] args) throws ParseException {
//生存XX天
              String birth = new Scanner(System.in).nextLine();
              SimpleDateFormat s =new SimpleDateFormat("yyyy-MM-dd");
              Date date = s.parse(birth);
              long birthday = date.getTime();
              long now=System.currentTimeMillis();
              System.out.println((now-birthday)/1000/60/60/24);
       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值