1,实例化String对象
有两种方式,我们直接看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.java.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”比较的是具体内容
我们上下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com.java.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对象方式,每次都创建一个新的对象;
我们上一个示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.java.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,字符串的内容不可变性
字符串的特性:不能改变字符串的内容;
要想改变,只能通过指向一个新的内存地址;
我们给下代码:
1 2 3 4 5 6 7 8 9 10 |
package com.java.chap03.sec08; public class Demo4 { public static void main(String[] args) { String name= "张" ; name+= "三" ; System.out.println(name); } } |
这里我们修改了name,本质的话name指向了一个新的内存区域,我们给下内存示意图:
关键字: java String类