目录
1.toString和Equlas(Object)
1.1toString
toString
方法是 Java 中 Object
类的一个公共方法,用于返回对象的字符串表示形式
方法旨在为对象提供一个易于阅读的字符串表示形式,通常用于调试和日志记录。
2.Equals
equals
方法也是 Object
类中的一个公共方法,用于比较两个对象是否相等。
默认情况下,equals
方法比较的是两个对象的引用是否相同。这意味着默认情况下只有两个对象引用指向同一个对象时,equals
方法才会返回 true
。
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
2.StringBuilder
StringBuilder
是 Java 中的一个类,位于 java.lang
包下,用于构建和修改字符串。与 String
类型不同的是,StringBuilder
对象是可变的,这意味着可以在不创建新对象的情况下更改字符串的内容。这对于频繁修改字符串内容的场合非常有用,因为它可以避免创建多个字符串对象,从而提高性能和减少内存消耗。
2.1StringBuilder 的用法
StringBuilder
提供了许多方法来操作字符串,比如插入、删除、替换字符等。下面是一些基本的用法:
创建 StringBuilder 对象
StringBuilder sb = new StringBuilder("Hello");
追加字符串
sb.append(" World!"); // 结果:sb.toString() 返回 "Hello World!"
插入字符串
sb.insert(5, " "); // 结果:sb.toString() 返回 "Hello World!"
删除字符
sb.delete(0, 5); // 删除从位置 0 到位置 4 的字符 // 结果:sb.toString() 返回 " World!"
替换字符
sb.replace(1, 5, "ello"); // 结果:sb.toString() 返回 "ello World!"
反转字符串
sb.reverse(); // 反转字符串 // 结果:sb.toString() 返回 "!dlroW olle"
字符串转换
String str = sb.toString();
2.2StringBuilder 的作用
StringBuilder
的主要作用是在需要频繁修改字符串内容的情况下提供高效的操作手段。以下是StringBuilder
的一些常见应用场景:
拼接大量字符串 当你需要将多个字符串拼接在一起时,使用
StringBuilder
比直接使用+
运算符更高效,尤其是在循环中。修改字符串内容 如果你需要在字符串中插入、删除或者替换字符,使用
StringBuilder
可以避免每次修改都需要创建一个新的字符串对象。性能优化 在需要频繁修改字符串内容的应用中,使用
StringBuilder
可以显著提高程序的性能。2.3注意事项
虽然
StringBuilder
非常有用,但在多线程环境中使用时需要注意同步问题。如果在一个多线程环境中共享StringBuilder
对象而不加同步控制的话,可能会导致数据不一致的问题。在这种情况下,可以考虑使用StringBuffer
类,它是StringBuilder
的线程安全版本。然而,在单线程环境中,StringBuilder
的性能通常优于StringBuffer
。总之,
StringBuilder
是一个非常有用的类,适用于需要频繁修改字符串内容的情况。正确使用它可以显著提升代码的性能和可维护性。深度搜索
4.LocalDateTime问题
LocalDateTime
是 Java 8 引入的新日期时间 API 中的一个类,位于 java.time
包下。它代表了日期和时间,但不包含时区信息。LocalDateTime
是不可变的,所有的方法都会返回一个新的 LocalDateTime
对象而不是修改现有的对象。
4.1LocalDateTime的基础用法
获取当前时间
//获取当前时间 LocalDateTime now = LocalDateTime.now(); System.out.println(now);
获取指定时间
//获取指定时间 LocalDateTime localDateTime = LocalDateTime.of(2003, 10, 16, 10, 10); System.out.println(localDateTime);
调整时间-->plus minus with(设置时间)
//调整时间-->plus minus with(设置时间) LocalDateTime localDateTime1 = now.plusDays(2); LocalDateTime localDateTime2 = now.minusDays(2); LocalDateTime localDateTime3 = now.withHour(10);
比较时间-->isBefore isAfter equals
//比较时间-->isBefore isAfter equals LocalDateTime of1 = LocalDateTime.of(2003, 10, 16, 10, 10); LocalDateTime of2 = LocalDateTime.of(2003, 11, 16, 10, 10); System.out.println(of1.isBefore(of2)); System.out.println(of1.isAfter(of2)); System.out.println(of1.equals(of2));
LocalDateTime转换为LocalDate和LocalTime
//LocalDateTime转换为LocalDate和LocalTime LocalDate localDate = of1.toLocalDate(); System.out.println(localDate); LocalTime localTime = of1.toLocalTime(); System.out.println(localTime);
LocalDate和LocalTime转换为LocalDateTime
//LocalDate和LocalTime转换为LocalDateTime LocalDateTime localDateTime4 = LocalDateTime.of(localDate, localTime); System.out.println(localDateTime4);
4.2LocalDateTime与String相互转换
public class Demo2 {
public static void main(String[] args) {
//将String转换成LocalDateTime
test1();
//将LocalDateTime转换成String
test2();
}
private static void test2() {
//获取指定时间
LocalDateTime of = LocalDateTime.of(2020, 9, 8, 10, 10, 10);
//定义转换模式
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//将LocalDateTime转换成String
String str = of.format(dtf);
System.out.println(str);
}
private static void test1() {
//定义时间字符串
String str = "2020-09-08 10:10:10";
//定义转换模式
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将LocalDateTime转换成String
LocalDateTime parse = LocalDateTime.parse(str, dtf);
System.out.println(parse);
}
}
4.3注意事项
在使用
LocalDateTime
时,需要注意以下几个方面:
不可变性:
LocalDateTime
对象是不可变的,所有修改日期时间的操作都会返回一个新的对象。因此,在需要频繁修改日期时间的情况下,需要确保性能上的优化。时区问题:
LocalDateTime
不包含时区信息。如果你需要处理涉及时区的日期时间,应该使用ZonedDateTime
或OffsetDateTime
。日期时间范围限制:
LocalDateTime
支持的日期范围是从公元元年(0001年)到公元9999年,因此在处理超出这个范围的日期时需要注意。日期时间计算:
- 在进行日期时间的加减操作时,要注意闰年、月份天数等因素的影响。例如,从2月29日减去一年可能不是2月28日,而是3月1日,因为不是闰年。
格式化和解析:
- 使用
DateTimeFormatter
来格式化和解析日期时间时,要确保模式字符串与日期时间字符串匹配,否则会抛出异常。线程安全性:
- 由于
LocalDateTime
是不可变的,因此它是线程安全的。但是,在创建新的LocalDateTime
对象时,如果有并发操作,需要确保创建过程中的同步。默认时区:
- 当使用
LocalDateTime.now()
方法时,默认使用系统设置的时区。如果需要指定时区,请使用ZonedDateTime
或OffsetDateTime
。与旧日期时间 API 的兼容性:
- 在使用
LocalDateTime
时,注意与旧的日期时间 API(如java.util.Date
和java.util.Calendar
)的区别。在迁移过程中,要确保正确的转换和使用方式。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » API常用类与函数-日期与时间
发表评论 取消回复