1.创建字符串
public static void main(String[] args) {
//创建字符串的三种方式
//1.
String str1 = "hello";
//2.
String str2 = new String("hello");
//3.
char[] chars = {'h','e','l','l','o'};
String str3 = new String(chars);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
String属于引用类型,str1引用了hello,改变str1的引用并不能改变常量池中的hello;
2.理解字符串的引用
public static void main(String[] args) {
//创建字符串的三种方式
//1.
String str1 = "hello";
//2.
String str2 = new String("hello");
//String str2 =str1;
//3.
char[] chars = {'h','e','l','l','o'};
String str3 = new String(chars);
System.out.println(str1==str2);//false
System.out.println(str2==str3);//false
System.out.println(str3==str1);//false
三个str都不相同,但在改用str2=str1时,str1的引用和str2相同,因此显示true,
}
==对比的是两个引用的身份,字符串的equals代表对比两个字符串的内容,
String str1 = new String("hello");
//2.
//String str2 = new String("hello");
String str2 = new String("hello");
这里的str1和str2并不相等,因为他们都指向了新的对象,常量池中存在了两个不同的"hello";
想要创建字符串指向已经存在的字符,需要使用intern
public static void main(String[] args) {
//创建字符串的三种方式
//1.
String str1 = "hello";
//2.
// String str2 ="hello";
String str2 = new String("hello").intern();
//3.
String str3 = new String("hello");
System.out.println(str1==str2);
System.out.println(str2==str3);
System.out.println(str3==str1);
3.字符,字节和字符串
字符串的内部包含着一个字符数组,String和char[]可以相互转换
常用的String转char方法
方法名 | 类型 | 作用 |
---|---|---|
public String(char value[]) | 构造 | 将字符数组中的所有内容转化字符串 |
public String (char value[],int offset,int count ) | 构造 | 将字符串数组中的部分内容转为字符串 |
public char charAt(int index) | 普通 | 取得指定索引位置的字符,索引从0开始 |
public char[] tocharArray() | 普通 | 将字符串变为字符数组返回 |
字节常用于数据传输以及编码转换的处理之中,String也能方便和byte[]相互转换
public String (byte bytes[]) | 构造 | 将字节数组变为字符串 |
---|---|---|
public String (byte bytes[],int offset,int length) | 构造 | 将部分字节数组中的内容变为字符串 |
public byte[] getBytes() | 普通 | 将字符串以字节数组的形式返回 |
public byte[] getBytes(String charsetName)throws unsupportedEncodingException | 普通 | 编码转换处理 |
4.StringBuffer和StringBuilder
任何字符串常量都是String对象,且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已
虽然String的操作简单,但由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder类,两者的大部部分功能相同。
String和StringBuffer最大的区别:String的内容无法修改,而StringBuilde可以修改字符串中的的内容;
但两者不能直接转换,需要遵守以下的转换原则:
1.String变为StringBuffer:利用StringBuffer的构造方法或append()方法
2.StringBuffer变为String:调用toString类没有的方法
String和StringBuffer、StringBuilder的区别
String的内容不可修改,其余两者可以修改
StringBuffer和StringBuilder大部分功能是相似的
StringBuffer采用同步处理,属于线程安全操作,而StringBuilder未采用同步处理,属于线程不安全操作