问题描述:

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

 public static void main(String[] args)
{
testStringBuffer test = new testStringBuffer(); StringBuffer stringBufferA = new StringBuffer("A");
StringBuffer stringBufferB = new StringBuffer("B");
StringBuffer stringBufferC = new StringBuffer("C"); test.change(stringBufferA, stringBufferB, stringBufferC); System.out.println(stringBufferA);
System.out.println(stringBufferB);
System.out.println(stringBufferC);
}
public void change(StringBuffer stringBufferA,StringBuffer stringBufferB,StringBuffer stringBufferC)
{
stringBufferA = new StringBuffer("AA");
stringBufferB.append("B");
stringBufferC = stringBufferA;
stringBufferC.append("C");
}

分析:
第一步,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()方法的区别

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

  1. 深刻理解Java中的String、StringBuffer和StringBuilder的差别

    声明:本博客为原创博客,未经同意.不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(链接为http://blog.csdn.net/bettarwang/article/detai ...

  2. 深入理解String、StringBuffer、StringBuilder(转)

    文章系转载,非原创,原地址: http://www.cnblogs.com/dolphin0520/p/3778589.html 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公 ...

  3. Java中String、StringBuffer、StringBuilder区别与理解

    一.先比较String.StringBuffer.StringBuilder变量的HashCode值 使用System.out.println(obj.hashcode())输出的时对象的哈希码, 而 ...

  4. 关于String和StringBuffer的使用

    java本身提供了n多对象方便我们进行开发,这些对象都是遵从着面向对象思想而出现的,后期再讲就不再讲思想了,而是不断学习这些对象的使用.我们的学习重点已经开始从面向对象思想转移到了面向对象的使用上来了 ...

  5. java面试题----String、StringBuffer、StringBudder区别

    面试题1 - 什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好? 面试题2 - 请说出下面程序的输出. class ...

  6. Java基础之String、StringBuffer、StringBuilder浅析

    Java基础之String.StringBuffer.StringBuilder浅析 一.前言: 位于java.lang包下的String.StringBuilder.StringBuffer一般都是 ...

  7. Java中的常用类:包装类、String、StringBuffer、StringBuilder、Math、System、Arrays、BigInteger、BigDecimal、Data、Calendar

    一.包装类 √ 二.String类 ★ 三.StringBuffer和StringBuilder类 ★ 四.Math类 五.System类 六.Arrays类 七.BigInteger类和BigDec ...

  8. Java问题解读系列之String相关---String、StringBuffer、StringBuilder的区别

    今天的题目是String.StringBuffer和StringBuilder的区别: 首先还是去官方的API看看对这三种类型的介绍吧,Go...... 一.继承类和实现接口情况 1.String类 ...

  9. String、StringBuffer与StringBuilder之间区别

    关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder >  String ...

随机推荐

  1. cocos2d-x-3.1 Text Labels(官方正式译文)

    介绍 cocos2d支持(true type字体)标签,和纹理地图集标签. LabelTTF 标签的优缺点: 全部 TTF 字体的长处: 随意大小,支持调整字距. 易于使用. 不须要外部编辑器. 创建 ...

  2. Duanxx 的 STM32 学习: 中断向量表操作

  3. JS闭包经典例题

    上一篇文章谈论了闭包的概念和一些应用,并给出一个例题,这篇文章就此道例题进行讨论. function fun(n,o) { console.log(o); return { fun:function( ...

  4. C#多线程及GDI(Day 23)

       又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和GDI的一些运用. 理论: 在学习多线程之前,首先要了解一下什么是进程? 进程:(关键字Process)进程是一个具有一定独立功能的程 ...

  5. iOS 中多线程的简单使用

    iOS中常用的多线程操作有( NSThread, NSOperation GCD ) 为了能更直观的展现多线程操作在SB中做如下的界面布局: 当点击下载的时候从网络上下载图片: - (void)loa ...

  6. JS中的replace方法

    JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/ ...

  7. 有关spring-servlet.xml 和 application.xml的配置信息讲解(这两个配置信息的区别在哪里)

    在使用springmvc时需要配置得信息有两个,一个是spring-servlet.xml和applcation.xml: 首先两个文件的的存放位置就有一点的不同(见下图),application.x ...

  8. 常用类库之.NET中的字符串

    字符串的特性 .不可变性 由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本).之所以发生改变只是因为指向了一块新的地址. .字符串池(只针对字符串常量) 当一 ...

  9. 无法在web服务器上启动调试,此项目在使用一个被配置为使用特定IP地址的网站。请在项目URL中指定计算机名称。

    解决方案:IIS服务器管理-default web site 绑定-选择使用的IP-编辑-IP地址:全部未匹配

  10. IOS 学习笔记(6) 控件 文本域(UITextField)的使用方法

    UITextField控件的诸多特性都和UITextView相似,比如成为输入文本焦点时键盘自动显示,支持长按弹出动作选项,能够接收输入事件(开始输入,修改内容,结束输入和点击回车等). 1.特有的特 ...