关于String和StringBuffer的理解问题:指针、变量的声明、变量的值的变化

问题描述:

首先,看一个小的测试程序:

 1 public static void main(String[] args)
 2     {
 3         testStringBuffer test = new testStringBuffer();
 4         
 5         StringBuffer stringBufferA = new StringBuffer("A");
 6         StringBuffer stringBufferB = new StringBuffer("B");
 7         StringBuffer stringBufferC = new StringBuffer("C");
 8         
 9         test.change(stringBufferA, stringBufferB, stringBufferC);
10         
11         System.out.println(stringBufferA);
12         System.out.println(stringBufferB);
13         System.out.println(stringBufferC);
14     }
15     public void change(StringBuffer stringBufferA,StringBuffer stringBufferB,StringBuffer stringBufferC)
16     {
17         stringBufferA = new StringBuffer("AA");
18         stringBufferB.append("B");
19         stringBufferC = stringBufferA;
20         stringBufferC.append("C");
21     }

分析:
第一步,main()方法中,会创建3个StringBuffer实例,并且为他们分别“赋值”:

 

第二步,进入到change()方法,首先执行了stringBufferA = new StringBuffer("AA");,,该行代码是在在内存中又实例化了一个StringBuffer,并“赋值”为AA:

第三步,执行stringBufferB.append("B");,,首先append()方法是将指定的字符串追加到目标字符序列,因为在main()方法调用change()方法时,给其传了三个参数,而在执行该行代码时,stringBufferB所引用的就是main()中stringBufferB引用的值"B",因此在使用append()方法追加字符时,就是改变了"B"的值为"BB":

第四步,执行stringBufferC = stringBufferA; ,,即将stringBufferC指向了stringBufferA,那么stringBufferC所表示的值就是stringBufferA表示的值,而在执行stringBufferA = new StringBuffer("AA");时,change()方法中stringBufferA的值已经发生了改变,指向了"AA",在stringBufferC引用stringBufferA时,也应该指向"AA":

第五步,执行stringBufferC.append("C");,,即向stringBufferC所指向的值追加"C",因此其值应该改变为"AAC":

第六步,因此在change()方法执行完了以后,返回到main()方法,进行StringbufferA、StringbufferB、StringbufferC的输出时,输出的值应该就是:A、BB、C

因为,在change()方法中,并未改变main()方法中变量(出StringbufferB)所引用值的值,而引用类型的数据类型,并不是真正的传值,传的是引用的地址,因此即使在change()方法是void的情况下,StringbufferB所引用的值也被改变了

总结:

前期的学习中,,所遇到的8种数据类型,即基本类型,包括后面用到的引用数据类型中,String类型是最特殊的数据类型,在对String类型变量的操作时,应该注意其指向的变化,而不是值得变化,因为String类型的长度不可变

后面会继续学习String.concat()方法和StringBuffer.append()方法的区别

转载于:https://www.cnblogs.com/Wfei/p/3248921.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值