string 在java.lang包内,所以实现的时候不需要导包
定义:
string类代表字符串,Java程序中的所以的字符串文字(例如”abc“)都被实现为此类的实例也就是说,java程序中的所有的双引号字符串,都是string的对象
字符串的特点:
1.字符串不可变,他们的值在创建后不可更改!也就是说为字符串分配一个地址后,地址中的内容不可改变,对字符串变量重新赋值相当于指向了新的内存空间)
2.虽然string的值是不可改变的,但是他们可以共享
3.字符串效果上相当于字符数组(char[]),但是底层原理是(byte[])
string的构造方法
public String(); 创建一个空字符串对象,没有内容
public String(char[]); 根据字符数组的内容,来创建字符串对象
public String(byte[]); 根据字节数组的内容,来创建字符串对象
String s ="abc"; 直接赋值的方式来创建字符串对象,内容就是abc
推荐直接使用赋值的方式得到字符串对象,联系来说,int char 之类的是不是也是如此,待实验
public static void main(String[] args) {
//public String();创建一个空字符串对象,没有内容
String s1 = new String();
System.out.println("s1:"+s1);
//public String(char[]); 根据字符数组的内容,来创建字符串对象
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println("s2:"+s2);
//public String(byte[]); 根据字节数组的内容,来创建字符串对象
byte[] bys = {105,98,99}; //97,98,99 在底层对应的就是abc ,105对应的就是i,已经固定写好的东西,拿来用就好
String s3 = new String(bys);
System.out.println("s3:"+s3);
//String s ="abc"; 直接赋值的方式来创建字符串对象,内容就是abc
String s4 = new String("abc");
System.out.println("s4:"+s4);
}
string对象的特点
1.通过new来创建字符串对象,每一次new都会申请一次内存空间,虽然内容相同,但是地址不同。
示例 char[] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
上述代码中,jvm(Java虚拟机)会首先创建一个字符数组,然后每一次new的时候,都会分配一个新的地址,只不过值是相同的。
2.以""方式来创建的字符串,只要字符序列相同(顺序和大小写),无论程序代码出现了几次,jvm都只会创建一个String对象,并在字符串池中维护
示例 String s1 ="abc";
String s2 ="abc";
上述代码中,针对第一行代码,jvm会创建一个String对象,并放在字符串池中,并给s1参考;
在第二行代码中则让s2直接参考字符串池中的string对象,也就是说它们本质上是一个对象,地址也是一样的。
特点的示例:
public static void main(String[] args) {
char[] chs = new char[]{'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
String s3 ="abc";
String s4 ="abc";
//比较s1于s2的地址是否相同
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
//比较s1于s3的地址是否相同
System.out.println(s1==s3);
//比较s3于s4的地址是否相同
System.out.println(s3==s4);
}