天天看点

Java面向对象-String类(上)

1,实例化String对象

有两种方式,我们直接看代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

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”比较的是具体内容

我们上下代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

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

我们给下内存示意图:

Java面向对象-String类(上)

3,String两种实例化方式的区别

直接赋值方式,创建的对象存放到字符串对象池里,假如存在的,就不会再创建;

new对象方式,每次都创建一个新的对象;

我们上一个示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

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

我们给下内存示意图:

Java面向对象-String类(上)

4,字符串的内容不可变性

字符串的特性:不能改变字符串的内容;

要想改变,只能通过指向一个新的内存地址;

我们给下代码:

1 2 3 4 5 6 7 8 9 10

package

com.java1234.chap03.sec08;

public

class

Demo4 {

public

static

void

main(String[] args) {

String name=

"张"

;

name+=

"三"

;

System.out.println(name);

}

}

这里我们修改了name,本质的话name指向了一个新的内存区域,我们给下内存示意图:

Java面向对象-String类(上)