java中的对象传递
java的值传递和引用传递
一:搞清楚 基本类型 和 引用类型的不同之处
int num = 10;
String str = "hello";
如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。
二:搞清楚赋值运算符(=)的作用
num = 20;
str = "java";
对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。
如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)
一个段有趣和令人困惑的代码
1 public static void main(String[] args){ 2 String str = new String("ab"); 3 change(str); 4 System.out.println(str); 5 } 6 7 public static void change(String str){ 8 str = "cd"; 9 }
结果为:ab
常见的困惑问题
x存储指向堆中的“ab”字符串的引用。所以,当x被作为参数传递到change()方法时,它仍然指向堆中“ab”,像下面这样:
因为java是按值传递的(pass-by-value), x的值是“ab”的引用。当方法的change()被调用,它会创建一个新的“cd”的对象,而x现在是指向“cd”像下面这样:
这似乎是一个相当合理的解释。他们明确表示,Java是总是传递按值。但是,错在哪里呢?
代码真正做了些什么呢?
上面的解释有几个错误。为了容易理解这一点,这是一个好主意,简单地描述整个过程。
当字符串“ab”被创建,java分配存储字符串对象所需的内存空间。然后,将对象分配给变量x,该变量是被实际分配的引用对象。此引用是该对象被存储在内存的地址。
变量x包含一个字符串对象的引用。 x不是引用本身!它是用于存储一个引用(内存地址)的变量。
Java是仅仅是按值传递。当x传递给change()方法,x的(引用)值的副本被传递。方法change()创建另一个对象“cd”,它有一个不同的引用。它是被改变的x副本指向“cd”的变量,而不是x引用本身。
下面的图表展现了真实的过程:
总结:实际上JAVA在方法里传递的只是对象的副本。
转载于:https://www.cnblogs.com/xiaocao123/p/10535304.html
java中的对象传递相关推荐
- 一文彻底搞懂Java中的值传递和引用传递!
关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很多有丰富经验的开发者,他们也很难解释的很清楚. 我很久也写过一篇文章,我当 ...
- 为什么说 Java 中只有值传递?
对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂. ...
- java中是引用传递还是值传递....
刚才与Z师兄聊天,他提问: 你说java中是引用传递还是值传递啊? 当时俺搞混了这个"传递"的意思, 本来以为是对象的实例化比如: abc a=new abc(); 这个a 是引用 ...
- java只有值传递_面试官:为什么 Java 中只有值传递?
1.为什么 Java 中只有值传递? 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语.按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(ca ...
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- 【Java基础】Java中的值传递、引用传递
Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...
- 用画小狗的方法来解释Java中的值传递
在开始看我画小狗之前,咱们先来看道很简单的题目: 下面程序的输出是什么? 如果你的回答是"小强",好,恭喜你答对了.下面我们改一下代码: 是的,我只是在changeName方法里面 ...
- 为什么说Java中只有值传递(另一种角度)
转载自 为什么说Java中只有值传递 对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到 ...
- java中String对象作为参数传递问题
问题 java中将对象作为参数传递究竟是值传递还是引用传递? 1.基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的. 2.对象作为参数传递时,是把对象在内存中的地址拷贝 ...
- java引用传递_理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,是一个讨论比较多的话题, 有说Java中只有值传递,也有些地方说引用传递和值传递都存在,本篇记录思考过程,不保证正确性, 感兴趣的同学一起讨论. 1.基本类型和 ...
最新文章
- SAP QM初阶之事务代码CR05查询QM Work Center List
- linux学习之路--(六)用户及权限详解
- Ajax+jquery实现异步验证用户名功能
- 基于GIS的视频管理指挥平台
- python实现单张图像拼接与批量图片拼接
- 【转】MS-DOS下怎样使用解压缩共具
- 从PCI上读取数据 线程和定时器效率
- Node.js:中间件——express简单的错误处理日志中间件
- 【bozj2287】【[POJ Challenge]消失之物】维护多值递推
- 用c语言实现数字时钟课程设计,基于C51单片机的数字时钟课程设计(C语言,带闹钟).doc...
- readelf命令解析及演示
- 彻底卸载VS2015
- 社交网络与社会计算课程内容梳理总结
- 使用微信公众号openid获取用户信息判断是否关注公众号
- Ambari 安装多个impala deamon节点(apache impala)
- ps一点等于多少厘米_请问PS中“像素”和“厘米”是怎么换算的?
- php调用谷歌翻译,PHP调用谷歌翻译实现翻译功能
- Xenu简单使用说明
- [转]我的故乡 - 冰心
- PS长投影文字制作教程