Java面向对象-String类(上)

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

 

我们给下内存示意图:

1.jpg

 

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

我们给下内存示意图:

2.jpg

 

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指向了一个新的内存区域,我们给下内存示意图:

QQ鎴浘20160924095402.png

 

关键字:   java     String类  

猜你喜欢

转载自blog.csdn.net/weixin_41934292/article/details/88323503
今日推荐