1.实例化String对象String name01 = "Tom";//直接赋值
String name02 = new String("Tom");//通过new关键字赋值
2.String对象的两种比较方式
(1)通过(==)比较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()方法。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两种比较方式
(1)一种是使用(==)完成,比较的是地址值。
(2)另一种是使用equals()方法完成,比较的是具体的内容。
String类两种实例化方式的区别——————直接赋值String str1 = "hello";
String str2 = "hello";
String str3 = "hello";
str1,str2和str3共用堆中的一块内存。如下图所示:

String类两种实例化方式的区别——————通过关键字new赋值String str = new String("hello");
在堆内存开辟了两个空间。如图所示:

使用直接的方式只需要实例化对象即可,而使用new String()的方式则意味着要开辟两个内存对象。在开发中最好使用直接赋值的方式完成。