String 类的两种实例化方式
A.直接赋值
public class Stringlei
{
public static void main(String args[]){
String name="张三";
System.out.println("姓名:"+name);
}
}
B.通过关键字new
public class Stringlei
{
public static void main(String args[]){
String name=new String("张三");
System.out.println("姓名:"+name);
}
}
String的内容比较
1.使用“==”比较
public class Stringlei
{
public static void main(String args[]){
String str1="hello";
String str2=new String("hello");
String str3=str2;
System.out.println("str1==str2?-->"+(str1==str2));//false
System.out.println("str1==str3?-->"+(str1==str3));//false
System.out.println("str2==str3?-->"+(str2==str3));//true
}
}
由此可知:"=="判断的是地址空间是否相等判断的是地址,如果想要判断内容,则必须使用String中提供的equals()方法完成:
public class Stringlei
{
public static void main(String args[]){
String str1="hello";
String str2=new String("hello");
String str3=str2;
System.out.println("str1==str2?-->"+(str1.equals(str2)));//true
System.out.println("str1==str3?-->"+(str1.equals(str3)));//true
System.out.println("str2==str3?-->"+(str2.equals(str3)));//true
}
}
两种实例化方式的区别
在String中可以使用直接赋值和new调用构造方法完成。比较两种方法。
一个字符串就是String的匿名对象
public class Stringlei
{
public static void main(String args[]){
String str1="hello";//实际就是将一个堆内存空间的指向给了栈内存空间
String str2="hello";
String str3="hello";
System.out.println("str1==str2?-->"+(str1==str2));//true
System.out.println("str1==str3?-->"+(str1==str3));//true
System.out.println("str2==str3?-->"+(str2==str3));//true
}
}
字符串的内容不可改变
public class Stringlei
{
public static void main(String args[]){
String str="hello";
str=str+" world!";
System.out.println("str = " +str);
}
}
此处并不是简单的改变了str中的内容,具体如下图: