public class TestString {

public static void link(String a){

a+="World";

}

public static void main(String args[]){

String a="Hello";

link(a);

System.out.println(a);

}

}

输出结果:Hello

解析:String类型作为参数传递在Java中为值传递。

Java程序总是从main方法开始执行,main方法开始定义了a这个局部变量,当程序执行link()方法时,系统进入link()方法,并将main()方法中的a变量作为参数传入link()方法,传入link()方法的只是a的副本,而不是a本身,进入link()方法后系统中产生了两个变量(两个a)。系统分别为main()和link()分配两块栈区,用于保存main()和link()方法的局部变量a。程序在link()方法中将变量a改为HelloWorld,而main()方法中的变量a的值并未改变。

值传递的实质:当系统开始执行方法时,系统为形参执行初始化,,就是把实参变量的值赋给方法的形参变量,方法里操作的并不是实际的实参变量。

public class Demo01 {

public static void link(StringBuffer a){

a.append("World");

}

public static void main(String args[]){

StringBuffer a=new StringBuffer("Hello");

link(a);

System.out.println(a);

}

}

运行结果:HelloWorld

解析:StringBuffer类型作为参数传递在Java中为引用传递。

程序从main方法开始执行,main方法开始创建了一个StringBuffer对象,并定义了一个a引用变量来指向StringBuffer对象,这是一个与基本类型不同的地方。创建一个对象时,系统内存中有两个东西:堆内存中保存了对象本身,栈内存中保存了引用该对象的引用变量。接着程序通过引用来操作StringBuffer对象,接下来,main方法开始调用link()方法,main方法并未结束,系统会分别开辟出main和link两个栈区,用于存放main和link方法的局部变量。值得指出的是,main方法中的a是一个引用,它保存了StringBuffer对象的地址值,当把a的值赋给link方法的a形参后,即让link方法的a形参也保存这个地址值,即也会引用到堆内存中的StringBuffer对象。这种参数传递方式是不折不扣的值传递方式,系统一样复制了a的副本传入link()方法,但关键在于a只是一个引用变量,所以系统复制了a变量,但并未复制StringBuffer对象。当程序在link()方法中操作a形参时,由于a只是一个引用变量,故实际操作的还是堆内存中的StringBuffer对象。此时,不管是操作main()方法里的a变量,还是操作link()方法里的a参数,其实都是操作它所引用的StringBuffer对象,它们操作的是同一个对象。因此当link()方法中参数a改变了,man()方法中a变量所引用StringBuffer对象的a也改变了。

public class Demo01 {

public static void link(StringBuilder a){

a.append("World");

}

public static void main(String args[]){

StringBuilder a=new StringBuilder("Hello");

link(a);

System.out.println(a);

}

}

运行结果:HelloWorld

解析:说明StringBuilder和StringBuffer一样,作为参数传递时为引用传递

java值传递试题_面试题:java参数传递 | 学步园相关推荐

  1. java五子棋核心算法_五子棋的核心算法 | 学步园

    五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性.这里设计和实现了一个人机对下的五子棋程序,采用了博弈树的方法,应用了剪枝和最大最小树原理进行搜索发现最好的下子位置.介绍 ...

  2. java的数列极差_[hoj]数列极差问题 | 学步园

    贪心.关键是证明子问题最优即是总问题最优. 可以考虑三个数的情况,易证选取最小的数擦除将得到最大数,vice versa .故总体也是如此. 用优先队列实现.STL自带仿函数greater<&g ...

  3. java 怎么改变值传递_学习Java值传递方法

    学习Java值传递方法-武汉北大青鸟 值传递是在一个函数中,调用另外一个函数,其中含有参数传递的情况.往往值传递就是把数据传递到另外一个函数中进行进一步处理,以更清楚地显示函数的表达意思.在函数调用的 ...

  4. Java值传递与引用传递的区别

    Java值传递与引用传递 文章目录 Java值传递与引用传递 前景 实参与形参 值传递与引用传递 Java中的值传递 总结 前景 关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都 ...

  5. java值传递和引用传递(附实例)

    java值传递和引用传递(附实例) 1.数据类型 1.1 基本数据类型 1.2 引用数据类型 2.形参与实参 2.1 函数中使用 2.2 调用 3.值传递和引用传递 3.1 定义 3.2 例子 3.3 ...

  6. Java值传递问题分析解决

    Java值传递问题分析解决 问题背景 解决方案 总结 Lyric: 失去你的地方 问题背景 因为深知函数非基本类型的参数都是浅拷贝,所以在调用的函数中更改参数的值,调用方的值也会随之改变,但今天遇到一 ...

  7. java值传递和引用传递 面试题

    前言 某坑公司的面试题如下 我认真了想想,这无非就是Java 的值传递和引用传递,利用反射是可以做到的 反射 public static void doSomethingReflect(Integer ...

  8. java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...

    变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...

  9. java值传递和引用传递_辨析Java方法参数中的值传递和引用传递

    小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示. publ ...

最新文章

  1. mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复
  2. lintcode-easy-Insertion Sort List
  3. mysql数据库优化课程---6、mysql结构化查询语言有哪些
  4. spring security加载原理(基于springboot)
  5. 数据结构之链表创建一元多项式,求一元多项式之和
  6. 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)
  7. 共同好友推荐java_【开班典礼】初雪迎初见,白色浪漫中,他们选择从此与Java相伴!...
  8. 服务器麒麟系统能设置mtu吗,麒麟操作系统安装标准手册-20210405220006.docx-原创力文档...
  9. javascript学习系列(21):数组中的reduceRight法
  10. Gartner分享物联网和智慧城市最新数据
  11. 用计算机解决问题听课笔记,《计算机解决问题的过程》的教学设计
  12. 2019数据技术嘉年华主会场,数据英雄荟萃一堂共论道
  13. 淘宝京东设计师来看,电商Banner设计策略!
  14. easyui dialog 不执行页面js_Spring Security(六):前端菜单,角色权限页面的搭建
  15. 数据库中的年月日表达
  16. Python让繁琐工作自动化——chapter13 处理PDF和Word文档
  17. WS2811是三通道LED驱动控制专用电路彩灯带专用方案开发IC
  18. 游戏服务器背包系统,Unity MMORPG 背包系统如何设计
  19. 开发3dMax插件的方法和应用
  20. c语言邻接表的普里姆算法,图的遍历和生成树求解实现(邻接矩阵、邻接表 —图的深度广度遍历算法的实现和最小生成树PRIM和KRU...

热门文章

  1. React Native开发学习笔记——WebStorm运行项目
  2. (六)Vue3.0预学习
  3. linux git中央仓库地址,如何在Linux上搭建一个Git中央仓库
  4. js遍历多层嵌套对象存在的JSO数据
  5. typescript类型断言
  6. jade模板引擎修改为ejs模板引擎
  7. 求职及学习心情文章收集
  8. Matlab数组创建
  9. java项目中.classpath,.settings,.project,mymetadata文件的作用
  10. 路由器WIFI连接无法正常访问个别网站及发送图片