(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/77688416冷血之心的博客)

一年前我总结过一篇博客:Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题 这篇博客针对Java中值传递和引用传递举了几个例子,进行了分析。这篇博文将再次举出典型案例一起分析。

1、值传递的案例:

        @Testpublic void method1(){int x=0;this.change(x);System.out.println(x);}void change(int i){i=7;}

这毫无疑问输出是0

2、请说出以下代码的正确输出:

@Test
public void method1() {StringBuffer x = new StringBuffer("Hello");this.change(x);System.out.println(x);
}void change(StringBuffer i) {i.append(" world!");
}

这段代码的输出是:Hello world!

为什么?答案见下图:(哈哈,画的是丑了点哈~)第二个图是调用函数时出现的,函数change中所做的操作如图3所示,最后输出x时,引用变量指向的堆中发生了变化。所以输出为:Hello world!

3、请问下边代码的输出结果是什么?

@Test
public void method2() {StringBuffer x = new StringBuffer("Hello");change2(x);System.out.println(x);
}
void change2(StringBuffer i) {i = new StringBuffer("hi");i.append(" world!");
}

输出结果是:Hello,我们通过画图来分析分析究竟发生了什么?

由图可以看出来,在函数change2中将引用变量i重新指向了堆内存中另一块区域,下边都是对另一块区域进行修改,所以输出是Hello


4、接下来这道题,请大家给出答案?代码如下:

public class Main {public static void main(String[] args) {StringBuffer sb = new StringBuffer("Hello ");System.out.println("Before change, sb = " + sb);changeData(sb);System.out.println("After change Data(n), sb = " + sb);}public static void changeData(StringBuffer strBuf) {StringBuffer sb2 = new StringBuffer("Hi ");strBuf = sb2;sb2.append("World!");}
}

正确答案为:????

如果大家已经掌握了上边我画图的精髓,应该可以得出正确答案哦~

如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~

本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。

Java值传递和引用传递基础分析相关推荐

  1. Java中的值传递和引用传递

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?      答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为 ...

  2. Java值传递与引用传递

    Java面试题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案基本上是:值传递 说明:得出这种结论的前提必须是&qu ...

  3. Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

    来自:沉默王二 在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很 ...

  4. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  5. Java中传参数--值传递和引用传递

    ** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...

  6. java的引用传递_Java的值传递和引用传递

    首先来看一段代码: User类: 1 public classUser {2 privateString name;3 4 publicString getName() {5 returnname;6 ...

  7. java引用传递关键字_Java值传递和引用传递

    Java值传递和引用传递 1 什么是Java值传递和引用传递 在Java中只有值传递,而没有引用调用.如果我们调用传递值的方法,则称为按值调用.在调用方法中完成的更改在调用方法时不受影响. 2 Jav ...

  8. java中的值传递和引用传递问题

    值传递与引用传递 最近学基础的时候,老师讲了值传递和引用传递,这个问题一直不太明白,上网查了很多资料,按照自己的理解整理了一遍,发现之前不太明白的地方基本上想明白了,如有不正确的地方,欢迎指正,谢谢. ...

  9. 【Java基础】Java中的值传递、引用传递

    Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...

最新文章

  1. np.c_和np.r_用法
  2. mac下Android studio配置gradle的路径
  3. ECharts Tooltip
  4. C语言文件操作函数的编写
  5. OpenGL:画三角形程序详解笔记
  6. [Unity] GameFramework 学习记录 1
  7. 一起来学习丨听海华大赛第一名团队聊比赛经验和心得
  8. android开发模仿文件管理器_2020 Web界面开发:DevExtreme全新的Diagram控件、文件管理器...
  9. 3d建模电脑配置要求_2019年3d设计渲染电脑配置推荐
  10. kubernetes视频教程笔记 (5)-网络通讯方式
  11. 【图像去噪】基于matlab小波变换+Contourlet变换+PCA图像去噪【含Matlab源码 610期】
  12. Android开发EasyAr初试
  13. 微软全息眼镜Hololens开发者版发货 售19000元
  14. 如何判断一个文件的编码格式是gb2312还是gbk等
  15. C语言进阶-高阶指针
  16. IOS前奏之Object-C基础:类的构造函数和description(自描函数)
  17. 小程序--语音合成tts 对接多平台(讯飞,思必驰,百度)
  18. PostgreSQL 数据库下载安装
  19. 世界坐标系和图像坐标系的对应关系
  20. 鸿蒙系统怎么安装mate30,mate30 5g 鸿蒙系统在哪里下载安装

热门文章

  1. Omni Recover适用的IOS数据恢复方案
  2. 关于padding被计算在width中问题——box-sizing相关
  3. 计算机控制系统在农业上的应用研究,计算机自动控制系统在农业生产中的应用.doc...
  4. 开源研究价值_开源揭示了社会规范的价值
  5. MATLAB+Simulink实现赛车(含多种赛车相关场景)建模(含源码)
  6. MIPS 指令集(共31条)
  7. ArcGis js api 简单绘制点线面
  8. python爬虫爬取豆瓣图书热评并生成图云
  9. CPU的三种虚拟化机制
  10. 1028 人口普查 C++