网上关于 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 方法...
Java 中的参数传递机制,可以简单地总结为:基本类型作为参数传递时,是传递值的拷贝;对象作为参数传递时,是传递对象的引用。如果你在方法内改变了对象的值,那么原对象也跟着改变,但是如果你重新分配了对象的...
java传递参数的方法 很的东西 大家下载学习一下
Java参数传递机制是编程中非常重要的概念,它涉及到基本类型和引用类型的差异。在Java中,参数传递主要有两种方式:值传递(Value Passing)和引用传递(Reference Passing)。虽然Java官方文档并未明确提及引用传递...
这篇博客文章“JAVA反射参数传递概略”将深入探讨如何使用反射来处理方法参数,尤其是涉及到参数传递的细节。 首先,让我们理解什么是参数传递。在Java中,有两种基本的参数传递方式:值传递和引用传递。值传递是将...
总结一下,JNI 参数传递的关键点包括: 1. **类型映射**:Java 和 C++ 的数据类型不同,需要使用 JNI 提供的类型映射,如 `jint`、`jstring` 等。 2. **字段访问**:使用 JNI 的 `GetFieldID` 和 `GetObjectField`...
总结来说,JNI中的参数传递涉及以下步骤: 1. 在Java中定义与C++结构体匹配的类。 2. 使用`javah`生成C/C++头文件。 3. 在C++中实现本地方法,注意使用正确的JNI类型和函数来处理参数和返回值。 4. 转换C++数据类型...
在Java编程语言中,关于Java对象作为参数传递时的行为,存在一种常见的误解。许多人认为对象是按引用传递,而实际上,Java总是按值传递,包括对象。这里的“值”指的是对象的引用,而不是对象本身。这与C++或C#等...
#### 一、Java参数传递的基本概念 在Java中,方法(或称为函数)可以通过参数来接收外部的数据,并且能够返回处理后的结果。参数的传递方式主要有两种:值传递(Pass-by-value)和引用传递(Pass-by-reference)。...
总结,JNI参数传递涉及基本类型、自定义对象和系统对象。理解和熟练掌握这些技术对于深入Android开发和优化性能至关重要。在实际应用中,应特别注意内存管理和对象生命周期,以确保代码的稳定性和效率。通过实践和...
对于对象的参数传递,Java采用的是引用传递的方式。这意味着当你传递一个对象作为参数时,实际上是传递了对该对象的引用,而不是对象本身的副本。因此,在方法内部对这个对象所做的任何改变都会反映到原始对象上。 ...
Java 面向对象编程中,参数传递是非常重要的一个概念。参数传递有两种方式:值传递和引用传递。了解这两种方式的区别是非常重要的,因为它们对程序的执行结果产生了很大的影响。 值传递是指将实际的内存中的值传递...
总结来说,通过JNI将Java对象传递到C代码,需要理解JNI的API,正确处理Java对象的生命周期,并确保在C代码中安全地操作这些对象。这既是一个挑战,也是提升程序性能和功能的重要手段。在实际开发中,应充分考虑跨...
总结来说,Java中的参数传递分为值传递(基本类型)和引用传递(对象)。值传递不会改变原始变量,而引用传递会根据对象是否可变来决定是否影响原始对象。在处理String对象时,虽然看起来像是引用传递,但由于String...
标题“Java是值传递,传对象引用也是通过值”揭示了Java中参数传递的核心概念。Java总是以值传递方式进行,这意味着当你将一个变量作为参数传递给方法时,传递的是该变量所存储值的一个副本。然而,对于对象类型的...
Java的参数传递方式实际上是一种特殊的"值传递",通常被称为"按引用传递对象的引用",这与C++等语言中的引用传递有所不同。以下是对这个主题的详细解释。 在Java中,所有的参数传递都是基于值的,但这涉及到一个...
在Java中,当一个对象作为参数传递给方法时,实际上是传递了该对象引用的副本,而不是对象本身。这意味着,即使在方法内部改变了对象的属性,原始对象仍然保持不变,因为方法内部操作的是副本引用所指向的对象。例如...
综上所述,在Java中,对于基本数据类型的参数传递实际上是按值传递,而对于对象类型的参数传递则是按引用传递的一种特殊形式——传递的是对象引用的副本,但由于这些副本指向同一个对象,因此对对象的修改会影响到...
Java方法参数传递机制原理解析 Java方法参数传递机制是指在Java中,方法调用时传递参数的机制。参数传递机制可以分为两种:值传递和引用传递。 值传递是指基本数据类型的参数传递,值传递的体现是数值的传递。在值...