String类型

 

value不能指向新地址

演示案例

练习题

堆中的数组可以改变该对象的内容,

常量池中的字符串不能改变内容,只能指向新的字符串

下图是new ex 后的内存图 

 调用change后的内存图

首先str的指向发生改变,因为hsp是常量池里字符串不能改变,所以只能新建出Java这个字符串,把str原先指向hsp改成指向Java

 其次修改数组ch,因为ch在堆中是可以修改的,所以把ch的java改成了hava

change方法执行完毕后,change空间销毁,但是修改的还是会保留

ex的str指向还是不变(指向hsp),ex的ch指向发生变化(指向hava)

 两种创建String对象区别

方式1:如果常量池有hsp,s就直接指向常量池里的hsp。 

             如果常量池没有hsp,先在常量池新建一个hsp再用s指向hsp

方式2:现在堆中建立value数组,用value数组指向hsp

练习题1

a和b内容相等,equals结果为true

a和b指向的都是常量池里的“abc”,地址相同,==结果为true

 练习题2

 

练习题3

要注意p1.name==p2.name比较的是p1.name和p2.name指向谁,而不是p1和p2指向谁

p1.name和p2.name都指向常量池的hspedu,所以==为true

 而s1==s2中,s1指向s1在堆中创造的value数组(可以称之为v1),s2指向s2在堆中创造的value数组(可以称之为v2),所以s1==s2为false

 Intern方法

 

 在这里,因为a已经在常量池创建了“hsp”,所以b.intern直接指向常量池中的“hsp”。

所以a和b.intern指向的是同一个东西,==为true

但是b指向堆中的value,b.intern指向的是常量池,所以==为false

字符串特性:常量相加看常量池,变量相加是在堆中

常量相加看常量池

变量相加是在堆中

当变量c = 变量a+变量b,会先把a和b指向的对象存放在堆的value中,最后再调用tostring方法生成新的常量值helloabc然后指向它

内存图

 String常用方法

 

4和5:找不到返回-1

 第二组

format使用案例

 拿到一个名字,先用空格把名字划分三个部分

 names【0】=Han, names【1】=shun, names【2】=Ping

因为要求的是变成Ping,Han.S,所以Ping,Han都是String用%s,而S是char类型所以要用%c

最后结果:formate=Ping,Han.S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值