网上关于 java参数传递的说法云天雾地的,许多人不严谨的说法给许多新人 造成了误解。
经过多方试验 本人就个人理解 总结如下:希望对探求真理的同学有所帮助,如果有不严谨的说辞 ,请予以留言指正,互相讨论 共同进步。
public class Bean(
private String name;
public void setName(String name){this.name=name;}
public String getName(){return this.name;}
)
public class Test{
public static void main(String args[]){
Bean bean1=new Bean();
bean1.setName("abc");
Bean bean2=bean1;
bean2.setName("cba");
System.out.println(bean1.getName());
}
}
运行结果:cba
解释:java中变量都用 引用 这个名字代替
1。在内存的 栈内存区存储引用,堆内存存储引用指向的实际内容。
2. 虚拟机在运行的时候每读到一个引用就调至栈顶 然后对其操作。引用也是一个东西,他的实质是一个地址。一个记录了引用指向的具体变量内容的 堆内存地址。
例如 001单元的栈内存单元 存储了引用bean1,即001单元里存储着 @12345
而在堆内存单元地址 @12345里面存储了 bean1引用的实际内容。(或者是从这个地址开始的,根据变量类型决定)
这样bean1 就成为人们常说的 “指向内容的引用了”。因为存了内容的地址,所以可以叫指向。(不知道谁发明这个让大家费解的名词。)
3.理解了上面之后,bean2=bean1操作之后,会发生以下变化。
在内存的栈内存区域 的一个新的内存单元002中存储了一个引用的值@12346 。即栈内存单元002里面也存了@12345这玩意儿。 为啥呢?大家可以考虑下=号是什么意思,就是把等号右边的值给左边。
这样bean2也就指向了@12345的内容了。
4. bean2.setName("cba");这句话执行之后 就由bean2 这个玩意操作了@12345里面 的东西改成了cba
5.所以 无辜的 bean1 啥也没做 就被改了内容。因为bean1 也指向了 @12345
这就好比 业主 给了装修的一把自己家门的钥匙 ,然后 装修的进去把屋子给砸砸,业主也只能无辜的看着这一切的发生。
分享到:
相关推荐
java传递参数的方法 很的东西 大家下载学习一下
传值还是传引用 详细讲解JAVA参数传递机制 一目了然
java学习参数传递 杨辉三角,大学java作业题
前言在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参本,函数对形参的操作并不
<form method="post" ENCTYPE="multipart/form-data"> file类型职务的普通参数传递到后台问题解决
主要介绍了Java方法参数传递机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java spring mvc项目,通过URL地址传递对象参数给action
通过对典型程序的研究与分析可以看出JAVA语言的参数传递总是传值调用的,但是对于基本类型的参数和对象类型的参数来说,参数传递的情况不完全相同.Java语言不能直接使用传引用调用,但是可以通过数组的方式模拟传引用...
NDK开发有时需要Java和C/C++把对象作为参数互相传递, 详情参考: C/C++传递对象到Java:https://blog.csdn.net/niuba123456/article/details/80994037 Java传递对象到C/C+:...
我们知道,Struts2完成参数传递处理工作的基础是OGNL和ValueStack。而在这个 过程中,我也把Struts2所要做的工作大致归纳为两个方面: 1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. ...
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...
参数传递是Jave程序设计中方法调用的重要步骤,清楚地了解参数传递的过程是编写出高质量程序所必需的。本文将介绍在java中基本数据类型作为方法的参数和对象作为方法的参数是如何传递的。
Java对象及引用是容易混淆却又必须掌握的基础知识,本章阐述Java对象和引用的概念,以及与其密切相关的参数传递。
我们先看一下值传递和引用传递的概念...值传递的函数中无法改变原始对象,引用传递中函数 可以改变原始对象 我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;
需求: 在JS中向后台传递数组参数 分析: JS中的数组是弱类型的可以放任何类型... 但是可以使用JSON字符串来实现,在后台把JSON字符串解析成JAVA对象。 也许,你要说如果是复合对象怎么办,比如如下: 代码如下: public
定义类、属性和方法 创建并使用对象、对象和引用 Java方法的参数传递机制 方法的重载 实现良好的封装 构造方法的作用和构造方法重载
而对象引用作为参数不同了,对象参数所引用的对象状态是可以被改变的,因为方法 得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。 Java程序设计语言对对象采用的不是引用调用,实际上,...
android jni 传递对象的demo,展示了如何在java与C之间传递对象。详细介绍见相关博客。
Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 ...