1、实例化String:
(1)、直接赋值;
(2)、调用String类中的构造方法;
2、String的内容比较:
基本数据类型通过==比较,String通过==比较堆内存中的地址值,String类中equals方法比较的是内容。
String str1="hello"; String str2=new String("hello"); String str3=str2; System.out.println("str1==str2:"+(str1==str2)); System.out.println("str1==str3:"+(str1==str3)); System.out.println("str2==str3:"+(str2==str3)); 打印结果: str1==str2:false str1==str3:false str2==str3:true3、String两种实例化方式的区别:
首先明白:一个字符串就是一个String类的匿名对象,匿名对象就是已经开辟了堆内存空间并可以直接使用的对象。
String str1="hello"; 实际上就是把一个在堆中开辟好的堆内存空间的使用权给了str1对象,实际上使用这种方式还有另外一个好处, 就是如果一个字符串以及被一个名称引用,则以后再用相同的字符串声明时,就不会在开辟新的空间,如下:String str1="hello"; String str2="hello"; String str3="hello"; System.out.println("str1==str2:"+(str1==str2)); System.out.println("str1==str3:"+(str1==str3)); System.out.println("str2==str3:"+(str2==str3)); 打印结果:str1==str2:true str1==str3:true str2==str3:true 例子:使用new String()的方式实例化String对象public class Test3 { public static void main(String[] args) { String str=new String("hello");//通过关键字new实例化String对象 } } 一个字符串就是一个String类的匿名对象,而如果使用new关键字,不管如何都会再开辟一个新的空间,但是此时, 空间的内容还是hello,所以上面的代码开辟了两个内存空间。
对于字符串的操作就直接采用赋值的方式完成,而不采用构造方法传递字符串的方式完成。4、字符串的内容不可改变:
String类有一个特性,那就是字符串的内容一旦声明则不可改变。
5、String 类中常用的方法: