Java学习笔记:JDK8日期时间API与String特性

0 下载量 64 浏览量 更新于2024-09-01 收藏 129KB PDF 举报
"30天搞定Java–day21:涵盖了Java常用类,包括JDK 8之前和新日期时间API,以及String类的不可变性、比较器接口、System类、Math类、BigInteger与BigDecimal的相关知识。" 在Java编程语言中,`String`类是一个非常重要的部分,它代表不可变的字符序列。在`day21`的学习中,我们深入探讨了`String`类的一些关键特性。例如,当创建`String`对象时,如`s1="hello"`和`s2="hello"`,它们都会指向常量池中的同一实例,因为"hello"是一个字面量。然而,使用`new String("hello")`会创建一个新的对象在堆中,这在内存中产生了两个对象。 `String`类的不可变性意味着一旦创建,它的值就不能改变。例如,当我们执行`s1+="world"`,实际上会创建一个新的`String`对象,包含"hello world",而原始的`s1`并没有改变。由于这个特性,`String`类被声明为`final`,不能被继承。 在处理大量字符串操作时,`StringBuffer`和`StringBuilder`提供了更高效的选择。它们都是可变的,允许在原有基础上进行修改,而不是每次都创建新对象。其中,`StringBuffer`是线程安全的,适合多线程环境,而`StringBuilder`没有同步机制,因此在单线程环境中性能更好。 在JDK 8之前,日期和时间的处理主要依赖于`SimpleDateFormat`和`Calendar`类。这两个类虽然功能强大,但使用起来较为复杂。JDK 8引入了全新的日期时间API,包括`LocalTime`、`LocalDateTime`、`LocalDate`等,这些类提供了更加简洁和直观的接口,使得日期时间的处理变得更加容易。 `Comparable`接口用于实现对象的自然排序,比如`String`类已经实现了这个接口,可以根据字典顺序比较字符串。`Comparator`接口则允许自定义比较逻辑,可以用于任何类型的对象,提供了更大的灵活性。 `System`类提供了一些系统级别的功能,如获取当前时间`System.currentTimeMillis()`,或者清理输出流`System.out.flush()`。`Math`类则包含各种数学函数,如平方根`Math.sqrt()`和随机数`Math.random()`。 对于大整数运算,`BigInteger`和`BigDecimal`是Java中两个重要的类,它们分别用于表示任意精度的整数和浮点数,避免了因溢出或精度损失问题导致的计算错误。 复习`day20`的内容,我们可能学习了`String`、`StringBuffer`和`StringBuilder`之间的转换方法,以及如何在它们之间进行操作以提高效率。 `day21`的学习涵盖了Java开发中常用的类和接口,为后续更深入的Java编程打下了坚实的基础。通过理解和熟练运用这些知识点,开发者能够更高效地编写和优化Java代码。