javaSE基础学习笔记 day13 String StringBuffer StringBuilder Date类

Stirng类

  1. String 是 final 的,不可被继承。
  2. 实现了 Serializable 接口(支持序列化)和 Comparable (可比较大小)。
  3. 内部定义了 final char[] value 用于存储字符串。
  4. String:代表了不可变的字符序列,体现了不可变性。
    ①当 String 型对象被重新赋值时,需要重新指定内存区域赋值,不能改变原来的字符串。
    ②当对现有 String 型对象进行连接操作时,也需要重新指定内存区域赋值。
    ③当调用 replace() 修改字符或字符串时,也需要重新指定内存区域赋值。
public class StringTest {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";

        System.out.println(s1 == s2);//比较s1和s2的地址值,true

        s2 = "hello";
        System.out.println(s1);//abc
        System.out.println(s2);//hello

        String s3 = "abc";
        s3 += "def";
        System.out.println(s3);//abcdef
        System.out.println(s1);//abc

        String s5 = s1.replace('a','m');
        System.out.println(s5);//mbc
        System.out.println(s1);//abc
    }
}
  1. 通过字面量的方式给一个字符串赋值,此时字符串值在字符串常量池中。
  2. 字符串常量池是不会存两个相同的字符串的。

实例化方式

  1. 字面量定义(String s1 = “abc”;)
  2. new String();

结论:常量与常量的拼接,结果在常量池。
只要拼接中有一个量是变量,结果就在堆中。
如果调用String 的 intern() ,返回值就是常量池中的地址。

public class StringTest2 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abcdef";
        String s3 = s1 + "def";
        String s4 = (s1 + "def").intern();
        String s5 = "abc" + "def";
        System.out.println(s2 == s3);//false
        System.out.println(s2 == s4);//true
        System.out.println(s2 == s5);//true
    }
}

Stirng类常用方法

  1. int length():返回字符串的长度: return value.length。
  2. char charAt(int index): 返回某索引处的字符return value[index]。
  3. boolean isEmpty():判断是否是空字符串:return value.length == 0。
  4. String toLowerCase():返回一个将 String 中的所有字符转换为小写的对象引用。
  5. String toUpperCase():返回一个将 String 中的所有字符转换为大写的对象引用。
  6. String trim():返回字符串的副本,忽略前导空白和尾部空白。
  7. boolean equals(Object obj):比较字符串的内容是否相同。
  8. boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大
    小写。
  9. String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”。
  10. int compareTo(String anotherString):比较两个字符串的大小。
  11. String substring(int beginIndex):返回一个新的字符串,它是此字符串的从
    beginIndex开始截取到最后的一个子字符串。
  12. boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。
  13. boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。
  14. boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列
    时,返回 true。
  15. int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
  16. String replace(char oldChar, char newChar):返回一个新的字符串,它是
    通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

String 与 char[] 和 byte[] 之间的转换

  1. String --> char[]
    调用 toCharArray();
  2. char[] --> String
    调用 String 的构造器
  3. String --> byte[]
    调用 getBytes();
  4. byte[] --> String
    调用构造器

StringBuffer与StringBuilder

String:不可变的字符序列,底层用 final char[]存储字符序列;
StringBuffer:可变的字符序列,线程安全的,效率低,用 char[]储存字符序列。
StringBuilder:可变的字符序列,线程不安全的,效率高,用 char[]储存字符序列。

String s1 = new String();//底层char[] value = new char[0];
String s2 = new StringBuffer("abc");//底层char[] value = new char[str.length() + 16];

StringBuffer 与 StringBuilder 有同一个父类,他们的扩容机制一样。
如果调用 append() 添加超过数组默认容量时,那就会触发扩容机制,扩容为原来的长度的二倍再加二,并将原数组的内容复制到新数组中。
注意:如果再开发中能事先预知StringBuffer大概的容量,就应在实例化时指明大概长度,避免扩容导致效率降低。

StringBuffer与StringBuilder常用方法

  1. StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
  2. StringBuffer delete(int start,int end):删除指定位置的内容
  3. StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
  4. StringBuffer insert(int offset, xxx):在指定位置插入xxx

Date类

在 java 中,有两个 Date 类。

java.util.Date

  1. 两个构造函数
    ① Date():创建一个对应当前时间的对象。
    ② Date(long date):创建一个指定时间戳的对象。
    时间戳:从1970年1月1日0点到当前时间的毫秒数。
  2. 两个方法
    ① toString():显示当前对象的年月日时分秒。
    ②getTime():获取当前对象的时间戳。

java.sql.Date -->对应数据库的日期类型,是 java.util.Date 的子类。
如何将 java.util.Date 转换为 java.sql.Date ?
将父类对象的 getTime() 的返回值作为子类对象构造器的参数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值