java值传递试题_面试题:java参数传递 | 学步园
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参数传递 | 学步园相关推荐
- java五子棋核心算法_五子棋的核心算法 | 学步园
五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性.这里设计和实现了一个人机对下的五子棋程序,采用了博弈树的方法,应用了剪枝和最大最小树原理进行搜索发现最好的下子位置.介绍 ...
- java的数列极差_[hoj]数列极差问题 | 学步园
贪心.关键是证明子问题最优即是总问题最优. 可以考虑三个数的情况,易证选取最小的数擦除将得到最大数,vice versa .故总体也是如此. 用优先队列实现.STL自带仿函数greater<&g ...
- java 怎么改变值传递_学习Java值传递方法
学习Java值传递方法-武汉北大青鸟 值传递是在一个函数中,调用另外一个函数,其中含有参数传递的情况.往往值传递就是把数据传递到另外一个函数中进行进一步处理,以更清楚地显示函数的表达意思.在函数调用的 ...
- Java值传递与引用传递的区别
Java值传递与引用传递 文章目录 Java值传递与引用传递 前景 实参与形参 值传递与引用传递 Java中的值传递 总结 前景 关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都 ...
- java值传递和引用传递(附实例)
java值传递和引用传递(附实例) 1.数据类型 1.1 基本数据类型 1.2 引用数据类型 2.形参与实参 2.1 函数中使用 2.2 调用 3.值传递和引用传递 3.1 定义 3.2 例子 3.3 ...
- Java值传递问题分析解决
Java值传递问题分析解决 问题背景 解决方案 总结 Lyric: 失去你的地方 问题背景 因为深知函数非基本类型的参数都是浅拷贝,所以在调用的函数中更改参数的值,调用方的值也会随之改变,但今天遇到一 ...
- java值传递和引用传递 面试题
前言 某坑公司的面试题如下 我认真了想想,这无非就是Java 的值传递和引用传递,利用反射是可以做到的 反射 public static void doSomethingReflect(Integer ...
- java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...
变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...
- java值传递和引用传递_辨析Java方法参数中的值传递和引用传递
小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示. publ ...
最新文章
- mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复
- lintcode-easy-Insertion Sort List
- mysql数据库优化课程---6、mysql结构化查询语言有哪些
- spring security加载原理(基于springboot)
- 数据结构之链表创建一元多项式,求一元多项式之和
- 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)
- 共同好友推荐java_【开班典礼】初雪迎初见,白色浪漫中,他们选择从此与Java相伴!...
- 服务器麒麟系统能设置mtu吗,麒麟操作系统安装标准手册-20210405220006.docx-原创力文档...
- javascript学习系列(21):数组中的reduceRight法
- Gartner分享物联网和智慧城市最新数据
- 用计算机解决问题听课笔记,《计算机解决问题的过程》的教学设计
- 2019数据技术嘉年华主会场,数据英雄荟萃一堂共论道
- 淘宝京东设计师来看,电商Banner设计策略!
- easyui dialog 不执行页面js_Spring Security(六):前端菜单,角色权限页面的搭建
- 数据库中的年月日表达
- Python让繁琐工作自动化——chapter13 处理PDF和Word文档
- WS2811是三通道LED驱动控制专用电路彩灯带专用方案开发IC
- 游戏服务器背包系统,Unity MMORPG 背包系统如何设计
- 开发3dMax插件的方法和应用
- c语言邻接表的普里姆算法,图的遍历和生成树求解实现(邻接矩阵、邻接表 —图的深度广度遍历算法的实现和最小生成树PRIM和KRU...