Java 常用类
要求: 1、掌握 String 和 StringBuffer 的区别,可以熟练使用 String 和 StringBuffer 的各 种方法进行相关操作。 2、能够自己编写一个得到日期的操作类,并将日期进行格式化操作。 3、掌握比较器及其基本原理,并可以通过比较器进行对象数组的比较操作。 4、掌握对象克隆技术及其实现 5、能够灵活应用正则表达式对字符串的组成进行判断 6、掌握 Math、Random、基本数据类型的包装类的使用 7、描述出 Object System 对垃圾收集的支持 8、使用 NumberFormat、DecimalFormat、BigInteger、BigDecimal 进行数字的操 作
String 和 StringBuffer
String 的内容一旦声明不可改变,如果要改变,改变的是 String 的引用地址,如 果一个字符串要经常改变,必须使用 StringBuffer。 在一个字符串内容需要频繁修改时, 可以提升操作性能,因为 在一个字符串内容需要频繁修改时,使用 StringBuffer 可以提升操作性能 StringBuffer 内容可以改变,而 String 内容不可改变。StringBuffer 支持的方法大 部分与 String 类似。 StringBuffer 常见用法: 常见用法 用法: (1) 字符串的连接操作 String 类可以通过“+“进行字符串的连接,而 StringBuffer 中却只能使用 append 方法进行字符串的连接,而且此方法返回一个 StringBuffer 类的实例,这样就可 以采用代码链的形式一直调用 append 方法。 (2) 在任意位置处为 StringBuffer 添加内容 可以使用 insert 方法在指定位置上为 StringBuffer 添加内容 字符串的反转操作(较为常见的操作,使用 reverse 方法) (3) 替换指定范围的内容 replace 方法可对指定范围的内容进行替换。在 String 中如果要替换,使用的是 replaceAll (4) 字符串截取(使用 subString 方法从指定范围中截取内容) (5) 删除指定范围的字符串(使用 delete 方法删除指定范围内容) (6) 查找指定内容是否存在 (indexOf 查找指定内容, 查找到返回内容的位置, 没查到返回-1) 问题: (1)String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到底变了没有? 没有。因为 String 被设计成不可变(immutable)类,所以它的所有对象都是不可变 对象。在这段代码中,s 原先指向一个 String 对象,内容是 "Hello",然后我们对 s 进行了+操作, 那么 s 所指向的那个对象是否发生了改变呢?答案是没有。 这时, s 不指向原来那个对象了,而指向了另一个 String 对象,内容为"Hello world!", 原来那个对象还存在于内存之中,只是 s 这个引用变量不再指向它了。通过上面 的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,
或者说,不可预见的修改,那么使用 String 来代表字符串
的话会引起很大的内存 开销。因为 String 对象建立之后不能再改变,所以对于每一个不同的字符串, 都需要一个 String 对象来表示。这时,应该考虑使用 StringBuffer 类,它允许修 改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转 换十分容易。同时,我们还可以知道,如果要使用内容相同的字符串,不必每次 都 new 一个 String。例如我们要在构造器中对一个名叫 s 的 String 引用变量进行 初始化,把它设置为初始值,应当这样做: public class Demo { private String s;... public Demo { s = "Initial Value"; }...} 而非 s = new String("Initial Value"); 后者每次都会调用构造器, 生成新对象, 性能低下且内存开销大, 并且没有意义, 因为 String 对象不可改变,所以对于内容相同的字符串,只要一个 String 对象来 表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的 String 类 上面的结论还基于这样一个事实: 对于字符串常量, 型属性 s 都指向同一个对象。 如果内容相同,Java 认为它们代表同一个 String 对象