javaSE基础学习笔记 day13
Stirng类
- String 是 final 的,不可被继承。
- 实现了 Serializable 接口(支持序列化)和 Comparable (可比较大小)。
- 内部定义了 final char[] value 用于存储字符串。
- 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
}
}
- 通过字面量的方式给一个字符串赋值,此时字符串值在字符串常量池中。
- 字符串常量池是不会存两个相同的字符串的。
实例化方式
- 字面量定义(String s1 = “abc”;)
- 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类常用方法
- int length():返回字符串的长度: return value.length。
- char charAt(int index): 返回某索引处的字符return value[index]。
- boolean isEmpty():判断是否是空字符串:return value.length == 0。
- String toLowerCase():返回一个将 String 中的所有字符转换为小写的对象引用。
- String toUpperCase():返回一个将 String 中的所有字符转换为大写的对象引用。
- String trim():返回字符串的副本,忽略前导空白和尾部空白。
- boolean equals(Object obj):比较字符串的内容是否相同。
- boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大
小写。 - String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”。
- int compareTo(String anotherString):比较两个字符串的大小。
- String substring(int beginIndex):返回一个新的字符串,它是此字符串的从
beginIndex开始截取到最后的一个子字符串。 - boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。
- boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。
- boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列
时,返回 true。 - int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
- String replace(char oldChar, char newChar):返回一个新的字符串,它是
通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String 与 char[] 和 byte[] 之间的转换
- String --> char[]
调用 toCharArray(); - char[] --> String
调用 String 的构造器 - String --> byte[]
调用 getBytes(); - 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常用方法
- StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
- StringBuffer delete(int start,int end):删除指定位置的内容
- StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
- StringBuffer insert(int offset, xxx):在指定位置插入xxx
Date类
在 java 中,有两个 Date 类。
java.util.Date
- 两个构造函数
① Date():创建一个对应当前时间的对象。
② Date(long date):创建一个指定时间戳的对象。
时间戳:从1970年1月1日0点到当前时间的毫秒数。 - 两个方法
① toString():显示当前对象的年月日时分秒。
②getTime():获取当前对象的时间戳。
java.sql.Date -->对应数据库的日期类型,是 java.util.Date 的子类。
如何将 java.util.Date 转换为 java.sql.Date ?
将父类对象的 getTime() 的返回值作为子类对象构造器的参数即可。