关于String和StringBuffer的理解问题:指针、变量的声明、变量的值的变化
问题描述:
首先,看一个小的测试程序:
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的理解问题:指针、变量的声明、变量的值的变化的更多相关文章
- 深刻理解Java中的String、StringBuffer和StringBuilder的差别
声明:本博客为原创博客,未经同意.不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(链接为http://blog.csdn.net/bettarwang/article/detai ...
- 深入理解String、StringBuffer、StringBuilder(转)
文章系转载,非原创,原地址: http://www.cnblogs.com/dolphin0520/p/3778589.html 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公 ...
- Java中String、StringBuffer、StringBuilder区别与理解
一.先比较String.StringBuffer.StringBuilder变量的HashCode值 使用System.out.println(obj.hashcode())输出的时对象的哈希码, 而 ...
- 关于String和StringBuffer的使用
java本身提供了n多对象方便我们进行开发,这些对象都是遵从着面向对象思想而出现的,后期再讲就不再讲思想了,而是不断学习这些对象的使用.我们的学习重点已经开始从面向对象思想转移到了面向对象的使用上来了 ...
- java面试题----String、StringBuffer、StringBudder区别
面试题1 - 什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好? 面试题2 - 请说出下面程序的输出. class ...
- Java基础之String、StringBuffer、StringBuilder浅析
Java基础之String.StringBuffer.StringBuilder浅析 一.前言: 位于java.lang包下的String.StringBuilder.StringBuffer一般都是 ...
- Java中的常用类:包装类、String、StringBuffer、StringBuilder、Math、System、Arrays、BigInteger、BigDecimal、Data、Calendar
一.包装类 √ 二.String类 ★ 三.StringBuffer和StringBuilder类 ★ 四.Math类 五.System类 六.Arrays类 七.BigInteger类和BigDec ...
- Java问题解读系列之String相关---String、StringBuffer、StringBuilder的区别
今天的题目是String.StringBuffer和StringBuilder的区别: 首先还是去官方的API看看对这三种类型的介绍吧,Go...... 一.继承类和实现接口情况 1.String类 ...
- String、StringBuffer与StringBuilder之间区别
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder > String ...
随机推荐
- java中File类详解
构造函数 代码如下: public class FileDemo { public static void main(String[] args){ //构造函数File(St ...
- 手把手教你在openshift上搭建wordpress博客(二)
相同公布于:http://www.longgaming.com/archives/128 推荐前往阅读 这一篇文章主要介绍一些经常使用插件的使用和配置. 下面是我个人安装的一些插件.大家能够依据须要自 ...
- DevExpress ASP.NET 使用经验谈(5)-通过ASPxGridView实现CRUD操作
这节,我们将通过使用DevExpress的ASPxGridView控件,实现对数据的CRUD操作. 首先,我们在解决方案中,添加一个网站: 图一 添加新网站 图二 添加DevExpress.Data. ...
- 在不同Activity之间传递数据的四种常用方法
在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4. ...
- 我的iOS学习之路(四):动画设置
在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...
- C++ 字符串分割,分割到vector中
#include <string> #include <vector> using std::string; using std::vector; int splitStrin ...
- Queue(队列)
队列是一种后进后出的数据结构,下面介绍一下队列中常见的函数: 一.queue 中的 empty 函数 queue<int> q ; q.empty() ; // 若队列中无元素,返回tr ...
- jquery ajax 使用
异步刷新实现方式有多种,也可以借助JS的多种框架,下面是使用JQuery框架实现的AJAX 验证用户名是否存在 jQuery.ajax概述 HTTP 请求加载远程数据. 通过jQuery 底层 AJA ...
- IT项目经理
项目经理是具体项目工作的管理者,他们在工作中不断提升自己的领导才华,同时该职业又是一个权利与责任并存的职业, 他们主要对项目进行背景调查,收集整理项目相关资料,进行需求策划,撰写项目调查报告和信息综述 ...
- 在SQL2005中部署CLR 程序集
原文 在SQL2005中部署CLR 程序集 有关于CLR函数的用途和用法,请了解 SQL Server CLR 极速入门,启用.设计.部署.运行 http://www.yongfa365.com/It ...