今天代码审核时确认了一个问题,理解了java中string和stringbuffer赋值问题,看到一个帖子很好,摘录如下:

理解这两个例子需要分清实参和形参的区别,引用和对象的区别

第一个例子的内部执行过程:

1.引用str1指向新对象new String("hello")

2.test( )刚刚开始调用时,形参(parameter)str复制了实参(argument)str1的值,这个值也就是对象new String("hello")的地址,所以这时候引用str和引用str1指向同一个对象"hello"

3.进入到test( )方法内部,"world"这个对象被分配给形参str,而这个操作对实参str1并没有影响,所以这时候,引用str指向"world",而引用str1仍然指向原来的对象"hello"

4.test( )方法结束后,形参str从栈内存中消失,他指向的对象"world"由于没有其他引用指向它,也可以被gc回收了

4.打印引用str1指向的对象,即"hello"

第二个例子的内部执行过程:

1.引用str1指向新对象new StringBuffer("hello")

2.test( )刚刚开始调用时,形参(parameter)str复制了实参(argument)str1的值,这个值也就是对象new StringBuffer("hello")的地址,所以这时候引用str和引用str1指向同一个对象"hello"

3.进入到test( )方法内部,形参str调用append方法," world"附加到了引用str所指向的对象"hello"后面,由于形参str和实参str1指向的是同一个对象,所以这个操作同时也改变了引用str1指向的对象,因此这时候,引用str和str1指向同一个对象"hello world"

4.test( )方法结束后,形参str从栈内存中消失,他指向的对象"hello world"由于仍然有引用str1指向它,不满足被回收的条件

5.打印引用str1指向的对象,即"hello world"

理解这个例子后,回到原题,到底是传值还是传引用,一直是个有争议的问题,这个例子中,可以理解为值传递,这个值,就是引用所指向的对象的地址

public class Test

{

        public static void test(String str)

        {

            str = "world";

        }

        public static void main(String[] args)

        {

            String str1 = new String("hello");

            test(str1);

            System.out.println(str1);//str1的值并没有改变,说明在test(str1)中是传值的,        } //只是修改了str1的拷贝,而它的本身并没有改变

}

public class Test

{

        public static void test(StringBuffer str)

        {

            str.append(" world");

        }

        public static void main(String[] args)

        {

            StringBuffer str1 = new StringBuffer("hello");

            test(str1);

            System.out.println(str1);//但是这里的str1却改变了,成了hello world,是不是说这里的

//传递的是对象的引用???

        }

}

2013年6月19日星期三java中函数地址值传递的更多相关文章

  1. java中函数是值传递还是引用传递?

    相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...

  2. 2016年10月19日 星期三 --出埃及记 Exodus 19:3

    2016年10月19日 星期三 --出埃及记 Exodus 19:3 Then Moses went up to God, and the LORD called to him from the mo ...

  3. Java中到底是值传递还是引用传递?

    Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...

  4. Java中真的只有值传递么?

    Java中真的只有值传递么? (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法. 1.基本类型或基本类型 ...

  5. 面试题:Java中为什么只有值传递?

    作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 经典的问题 形参&实参 Java是 ...

  6. Summary: Java中函数参数的传递

    函数调用参数传递类型(java)的用法介绍. java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class Te ...

  7. java中的参数传递——值传递、引用传递

    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用 ...

  8. 12月15日下午Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  9. 2016年11月9日 星期三 --出埃及记 Exodus 19:25

    2016年11月9日 星期三 --出埃及记 Exodus 19:25 So Moses went down to the people and told them.于是摩西下到百姓那里告诉他们.

随机推荐

  1. WPF converter

    单值转换器 将单一值转换为特定类型的值,以日期转换为例如下: 1.定制DateConverter类,其中当值从绑定源传播给绑定目标时,调用方法Convert. 1 public class DateC ...

  2. python-字典(第二篇(四):字典)

    [Python之旅]第二篇(四):字典 摘要: 说明:     显然Python中字典的学习过程与列表是一样的,主要是围绕下面的函数来进行重点学习: 1 2 3 4 5 6 7 8 9 10 11 & ...

  3. 处理ASP.NET 请求(IIS)(2)

    ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...

  4. Ant配置

    首先去官网下载一个ant的文件 http://ant.apache.org/bindownload.cgi

  5. TOKEN的保存与验证

    Token主要为了防止非本页数据的提交,防止重复提交. /** * * 保存TOKEN信息 * */ public void saveToken() { //此处生成md5串 string md5 = ...

  6. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  7. 图论——读书笔记(基于BFS广度优先算法的广度优先树)

    广度优先树 对于一个图G=(V,E)在跑过BFS算法的过程中会创建一棵广度优先树. 形式化一点的表示该广度 优先树的形成过程是这样的: 对于图G=(V,E)是有向图或是无向图, 和图中的源结点s, 我 ...

  8. UIDatePikcer的基本用法

    - (void)viewDidLoad { [super viewDidLoad]; _datePicker = [[UIDatePicker alloc] initWithFrame:CGRectM ...

  9. Xcode 7真机测试详解

    1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk image 首先,准备好下面的设 ...

  10. JavaScript HTML DOM 事件

    JavaScript HTML DOM 事件 HTML DOM 使 JavaScript 有能力对 HTML 事件做出反应. 实例 Mouse Over Me 对事件做出反应 我们可以在事件发生时执行 ...