(十四)常用类(二)

文章介绍了Java中Object类作为所有类的父类,包含的方法如equals(),hashCode()等。强调了String的不可变性及其在内存管理上的影响,提供了字符串常用方法的概述。还讨论了BigDecimal用于高精度计算的用法,以及Date和Calendar类在处理时间上的功能,以及SimpleDateFormat在格式化日期和时间的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object

        之前在谈到继承的时候说过,如果一个类没有明确的继承关系,那么这个类将默认继承于Object类,所以Object是所有类的父类,因此Object中定义的方法都会被各个类继承。

方法:

判断两个对象的内存地址是否相同

boolean equals(Object obj);

获取对象对应的哈希码值(可以理解为是对象在堆内存中的地址)

int hashCode();

将对象转换为字符串,OBject默认是使用对象所属的包名.类名@对象的哈希码值的十六进制字符串

String toString();

对象被系统回收时调用的方法,由系统调用

void finalize();

字符串相关

        字符串可以分为可变字符串和不可变字符串。常用的String就是不可变字符串,可变字符串有StringBuffer和StringBuilder;

不可变字符串String

        String每次生成的字符串都会存放在常量池中,每次产生新的字符串,并不会销毁或者回收之前字符串所占用的内存,因此在大量字符串操作的时候,使用String就会导致内存消耗过大,整个程序运行卡顿的问题。

        如:String str = "hello";这串代码执行结束之后就会在常量池中创建一个”hello“,现在在这个字符串的基础上进行操作,str = str + “world”;现在的str就是字符串“helloworld”,那现在在常量池中就会产生一个world的字符串和helloworld的字符串,随着对字符串的操作,大量产生的字符串就会急剧的消耗内存。

常用方法

构造函数

String(bytes[] bytes,String charsetName);

        将byte数组转换成字符串,并指定编码格式;

String(bytes[] bytes,int begin,int len,String charsetName);

        将byte数组中指定位置开始的指定数量的元素转换成字符串,并使用指定的编码格式。

String(byte[] bytes,int begin,int len);

        将byte数组中指定位置开始的指定数量的元素转换成字符串。

方法

获取指定位置的单个字符

char charAt(int index);

查询字符串长度

int length();

判断字符串内容是否相同

        1.通过字典顺序判断字符串的内容是否相同,如果相同返回0,如果不相同,返回非0的数值。

int compareTo(String anotherString);

        2.直接通过字符串的内容进行判断,如果相同,返回true,不相同返回false

boolean equals(Object anObject);

         3.忽略字符串内容的大小写判断其内容是否相同,如果相同返回true,不相同返回false;

boolean equalsIgnoreCase(String anotherString);

 判断字符串是否包含指定字符串

boolean contains(String str);

判断字符串A在字符串B中第一次出现的位置

int indexOf(String str);

判断字符串A在字符串B中最后一次出现的位置

int lastIndexOf(String str);

判断字符串是否以指定的字符串开始

boolean startsWith(String str);

判断字符串是否以指定的字符串结束

boolean endsWith(String str);

将字符串转换为大写

String toUpperCase();

将字符串转换为小写

String toLowerCase();

判读字符串是否为空字符串

boolean isEmpty();

忽略前后空白,并返回去掉前后空白的字符串,如果字符串中间有空格,此函数不予处理。

String trim();

将字符串转换为字节数组

byte[] getBytes();

将字符串转换为字符数组

char[] toCharArray();

切割

String[] split(String s);

替换

String replace(String oldStr,String newStr);

        如果字符串中存在多个oldStr,则将这些oldStr全部替换为新内容。

String replaceFirst(String oldStr,String newStr);

        如果字符串中存在多个oldStr,则将首次出现的oldStr替换为新内容。

截取

String subString(int start);

        将字符串中以指定位置开始截取,直至字符串的最后一位元素,并返回截取后的子字符串。

String subString(int begin,int end);

        将子字符串中指定区间内的字符串截取出来,并返回。左闭右开。 

BigDecimal

        主要作用是用于解决计算机运算精度不足的问题。

使用方法:

BigDecimal big1 = new BigDecimal(0.1+"");
BigDecimal big2 = new BigDecimal(0.01+"");
big1 = big1.substract(big2);

        这样得到的结果就是精确结果。

        注意:BigDecimal有一个bug,当创建BigDecimal对象时,传入的参数是double类型,那么在计算之后其精度依旧不足。如果传入字符串就不会出现这种问题,所以在创建BigDecimal时,可以使用字符串拼接符将double类型的数据和空字符串链接起来,已解决这个问题。

时间相关

Date

        Date有两个构造函数,无参构造用于获取当前时间戳,并转换为我们可以看到的形式展现出了。

常用方法

long getTime();

         获取当前时间戳。

int compareTo(Date date);

        返回两个时间转换成时间戳后的差值,如果是0,则表示这两个时间是同一时间。

boolean after(Date date);
aDate.after(bDate);

        判断a日期是否在b日期之后,如果a在后,则返回true,反之返回false。

boolean before(Date date);
aDate.before(bDate);

        判断a日期是否在b日期之后,如果a在后,则返回true,反之返回false。

Calendar

        创建Calendar对象:Calendar calendar = Calendar.getInstance();

        因为Canlendar是一个抽象类,所以不能直接创建对象。

常用方法:

calendar.get(Calendar.YEAR);
//获取当前年份。
calendar.get(Calendar.MONTH);
//获取当前月份。
calendar.get(Calendar.DAY_OF_MONTH);
//获取当前时间是这个月的第几天。
calendar.get(Calendar.DAY_OF_WEEK);
//获取当前时间是这周的第几天。
calendar.get(Calendar.HOUR_OF_DAY);
//获取当前时间今天的第几小时。
calendar.get(Calendar.MINUTE);
获取当前分钟
calendar.get(Calendar.SECOND);
获取当前秒

SimpleDateFormat

        创建SimpleDateFormat需要制定字符串的格式

y:年

M:月

d:日

H:24小时制的时

h:12小时制的时

m:分

s:秒

S:毫秒

如:yyyy--MM--dd HH:mm:ss

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        将特殊格式的str转换为Date对象

String str = "2023-1-13 14:00:00";
Date date = format.parse(str);

        将Date对象转换为特殊格式的字符串

String str1 = format.format(date);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值