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


我们给下内存示意图:

1.jpg


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

我们给下内存示意图:

2.jpg


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

QQ鎴浘20160924095402.png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值