1,实例化String对象
有两种方式,我们直接看代码:
package com.java1234.chap03.sec08;
public class Demo1 {
public static void main(String[] args) {
// 实例化String的方式一
String name1="张三";
System.out.println("name1="+name1);
// 实例化String的方式二
String name2=new String("李四");
System.out.println("name2="+name2);
}
}运行输出:
name1=张三
name2=李四
2,“==”VS“equals方法”
“==” 比较的是引用(是否指向同一个内存块) “equals”比较的是具体内容
我们上下代码:
package com.java1234.chap03.sec08;
public class Demo2 {
public static void main(String[] args) {
String name1="张三"; // 直接赋值方式
String name2=new String("张三"); // new方式
String name3=name2; // 传递引用
// ==比较的是引用
System.out.println("name1==name2:"+(name1==name2));
System.out.println("name1==name3:"+(name1==name3));
System.out.println("name2==name3:"+(name2==name3));
// equals比较的是具体内容
System.out.println("name1.equals(name2):"+(name1.equals(name2)));
System.out.println("name1.equals(name3:"+(name1.equals(name3)));
System.out.println("name2.equals(name3):"+(name2.equals(name3)));
}
}运行输出:
name1==name2:false
name1==name3:false
name2==name3:true
name1.equals(name2):true
name1.equals(name3:true
name2.equals(name3):true
我们给下内存示意图:

3,String两种实例化方式的区别
直接赋值方式,创建的对象存放到字符串对象池里,假如存在的,就不会再创建;
new对象方式,每次都创建一个新的对象;
我们上一个示例:
package com.java1234.chap03.sec08;
public class Demo3 {
public static void main(String[] args) {
String name1="张三";
String name2="张三";
String name3=new String("张三");
String name4=new String("张三");
System.out.println("name1==name2:"+(name1==name2));
System.out.println("name1==name3:"+(name1==name3));
System.out.println("name3==name4:"+(name3==name4));
}
}运行输出:
name1==name2:true
name1==name3:false
name3==name4:false
我们给下内存示意图:

4,字符串的内容不可变性
字符串的特性:不能改变字符串的内容;
要想改变,只能通过指向一个新的内存地址;
我们给下代码:
package com.java1234.chap03.sec08;
public class Demo4 {
public static void main(String[] args) {
String name="张";
name+="三";
System.out.println(name);
}
}这里我们修改了name,本质的话name指向了一个新的内存区域,我们给下内存示意图:

上一篇:Java面向对象-代码块