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
    评论
### 回答1: 好的,我很乐意回答您关于Java基础类类型和继承的问题。 在Java中,有8个基本数据类型:byte,short,int,long,float,double,char和boolean。这些基本类型是Java语言中最基础的类型,它们可以用于声明变量和参数,以及作为返回值类型。 除了基本数据类型之外,Java还有一些常用的引用类型,比如字符串(String)、数组(Array)、日期(Date)等。这些引用类型是通过类来实现的,因此被称为类类型。 Java中的类类型是通过继承机制来构建的。一个类可以继承另一个类的属性和方法,从而实现代码的重用和扩展。Java的类继承是单继承,也就是说每个类只能直接继承一个父类。但是,一个类可以间接继承多个类,即一个类可以继承另一个类,而这个类又可以继承另一个类,以此类推。 Java中的继承关系可以用extends关键字来表示。例如,如果一个类A要继承另一个类B,可以使用以下代码: ``` class A extends B { // Class A code goes here } ``` 在这个例子中,类A继承了类B的所有属性和方法,并且可以添加自己的属性和方法。 继承的一个重要概念是覆盖(overriding)。如果子类需要改变父类中的方法实现,可以在子类中重新定义该方法,并且使用@Override注释来指示这是一个覆盖方法。例如: ``` class A extends B { @Override public void someMethod() { // Override implementation goes here } } ``` 在这个例子中,类A重新定义了类B中的someMethod()方法,并且使用@Override注释来指示这是一个覆盖方法。 希望这些信息能对您有所帮助。如果您有任何其他问题,请随时问我。 ### 回答2: Java基础类型包装类是指将基本数据类型封装成类的类型,它们与基本数据类型对应,可以让基本数据类型拥有面向对象的特性。Java基础类型包装类一共有八个,分别是Byte、Short、Integer、Long、Float、Double、Character和Boolean。 在Java中,基本类型与基本类型包装类型之间可以进行自动装箱和自动拆箱操作。自动装箱是指将基本数据类型转换为对应的包装类对象,自动拆箱则是指将包装类对象转换为对应的基本数据类型。 使用Java基础类型包装类可以提高Java程序设计的灵活度和可扩展性。比如,可以使用包装类来表示空值,而基本数据类型不能表示空值。此外,基础类型包装类可以作为参数传递给方法,可以通过反射操作这些类型,还可以实现对象的比较。 Java基础类型包装类还提供了各种方法来处理或转换数据。比如,可以使用Integer类的parseInt方法将字符串转换为整数;可以使用Double类的toString方法将浮点数转换为字符串;可以使用Character类的isLetter方法判断一个字符是否为字母等。 需要注意的是,在使用基础类型包装类的时候,应该尽量避免创建不必要的对象,因为基础类型包装类是对象,创建对象会导致额外的开销和内存消耗。 综上所述,掌握Java基础类型包装类的使用是Java程序员必不可少的基础技能。熟练掌握它们的特点和使用方法,将大大提高程序开发的效率和质量。 ### 回答3: Java基础类型包装类是为了将基本数据类型封装成对象类型而出现的。基本数据类型包括byte、short、int、long、float、double、boolean和char,而基本数据类型包装类分别是Byte、Short、Integer、Long、Float、Double、Boolean和Character。在使用Java的过程中,我们经常需要将基本数据类型转换成对象类型,或者将对象类型转换成基本数据类型。这时,就需要使用到基本数据类型包装类。 在第2关:Java基础类型包装-练习中,我们需要掌握以下几个方面的技能: 1. 创建包装类对象 可以使用new关键字加上对应的包装类名称来创建对应的包装类对象,例如: Integer i = new Integer(10); 2. 将字符串转换成基本数据类型或包装类对象 可以使用对应的valueOf方法将字符串类型转换成对应的基本数据类型或包装类对象,例如: int num = Integer.valueOf("10"); Integer i = Integer.valueOf("10"); 3. 自动装箱和拆箱 Java提供了自动装箱和拆箱的特性,可以简化代码编写。自动装箱是将基本数据类型自动转换成对应的包装类对象,自动拆箱是将包装类对象自动转换成对应的基本数据类型。例如: Integer i = 10; // 自动装箱 int num = i; // 自动拆箱 4. 基本数据类型和包装类对象之间的比较 基本数据类型和包装类对象之间可以通过equals方法进行比较,也可以使用“==”运算符进行比较,例如: Integer i1 = new Integer(10); Integer i2 = new Integer(10); System.out.println(i1.equals(i2)); // true System.out.println(i1 == i2); // false int num1 = 10; int num2 = 10; System.out.println(num1 == num2); // true 5. 基本数据类型和包装类对象的转换 可以通过对应的intValue、doubleValue等方法将包装类对象转换成对应的基本数据类型,例如: Integer i = new Integer(10); int num = i.intValue(); 总的来说,掌握Java基础类型包装类的使用可以让我们更加方便地进行基本数据类型和对象类型的转换和比较,可以大大提高代码的执行效率和可读性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值