转自:http://www.iteye.com/topic/12961
问题:JAVA书里面说,"Java 是传值还是传引用,问题主要出在对象的传递上,因为 Java 中简单类型没有引用。
回答:
莫名其妙。现在的书 和 资料 怎么都是这样故意误导。在一些名词说法上绕圈子,而不从基本原理进行阐述。
“传值和传引用”这个问题,我已经看到在多个地方,提出过多次了。这个问题的出现频率这么高,不能怪读者,主要是“概念制造者”的错。
对于这个问题,如果学过汇编,那么就很容易从堆栈内存结构上理解。
http://dev.csdn.net/article/17/17286.shtm
所有的参数传递都是 传值,从来没有 传引用 这个事实。
所有的参数传递都会在 程序运行栈上 新分配一个 值 的复制品.
楼主的第一段代码。
- public static void test(Pass passA); {
- passA.a="abc";
- }
这个传的 PassA 的 地址值。这个 地址值 被复制了一份。
不信,你写:
- public static void test(Pass passA); {
- passA = null;
- }
看看, 对passA有什么影响?
毫无作用。函数调用出来后,passA还是原来的值,不会变成Null.
但是,你的代码对 passA进行了操作 passA.a ,改变了passA的成员变量。
这个成员变量是一个真实指向String 的 地址,当然能够被改变。
这就是操作 (.) 和 赋值 (=) 的区别。
这是对 成员变量 a 的 赋值。真正改变了成员变量 a 的值。
注意,这里传递的参数是 passA, 而不是 a.
所以,passA 被复制了一份。passA 的这个副本的 a 变量还 指向 原来的 passA 的 a 变量。
楼主后面的代码,
- public static void test(String str); {
- str = "World";
- }
只有对参数的 赋值,没有对参数的操作,当然不会产生影响。
public static void test(StringBuffer str) {
str.append("World");
}
对参数进行了操作,当然会产生影响。
---
另:
同意“厌倦发呆”的意见。
和我说的一个意思,只是表述重点有些区别。
---
注:
传引用, 只有一种语法现象.
就是 C++的一种语法
void function(int & a){
a = 1;
}
这个实际上编译为
void function(int * a){
*a = 1;
}
相关推荐
### Java中的按值传递与按引用传递详解 #### 一、引言 在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点...
在Java编程语言中,了解值传递和引用传递的概念至关重要,因为它们直接影响到函数参数的处理方式。下面将详细探讨这两个概念及其区别。 首先,我们来理解什么是值传递。在Java中,基本数据类型(如int、double、...
在Java编程语言中,函数参数的传递方式有两种:值传递和引用传递。理解这两种机制对于编写高效、无误的代码至关重要。以下是对这两种传递方式的详细解析。 首先,值传递是指函数调用时,实际参数的值被复制一份传给...
### Java的引用与函数参数传递详解 #### 一、Java中的引用基础 在Java中,对象的引用扮演着类似于其他编程语言(如C/C++)中指针的角色,但是Java的引用比传统的指针更加安全且易于管理。这是因为Java的设计者们...
Java 中的基本类型和引用类型变量的区别 Java 中的基本类型和引用类型变量是两个不同的概念,它们在内存分配、变量赋值和函数传递等方面有着本质的区别。 基本类型是 Java 中的八种基本类型,包括 byte、short、...
对于基本类型,Java采用值传递的方式,而对于引用类型,则是传递引用的副本。 1. 值传递与引用传递的区别: - **值传递**:当传递基本类型参数时,实际传递的是该变量的值的一个拷贝。例如,对于一个布尔值`...
### 值引用与对象引用 #### 一、引言 在编程中,变量的引用方式分为两大类:值引用(Value Reference)和对象引用(Object Reference)。这两种引用方式决定了程序如何处理数据以及数据的存储方式。理解这些概念...
标题“Java是值传递,传对象引用也是通过值”揭示了Java中参数传递的核心概念。Java总是以值传递方式进行,这意味着当你将一个变量作为参数传递给方法时,传递的是该变量所存储值的一个副本。然而,对于对象类型的...
Java中的参数传递方式主要有两种:值传递和引用传递。理解这两种机制是编程中至关重要的,因为它们直接影响到函数内部如何改变或操作传入的数据。 **值传递**在Java中是基本数据类型(如int, double, char等)的...
本文将深入探讨Java中的对象、引用以及它们之间的关系,并结合值传递的概念进行解析。 首先,我们需要理解什么是Java对象。在Java中,对象是类的实例。当我们使用`new`关键字创建一个类的实例时,就创建了一个对象...
在 testCommon 方法中,我们首先输出了 a 和 b 的值,然后将 a 设置为 null,这样 a 就没有强引用指向了。然后,我们调用了 System.gc() 方法来请求垃圾回收器回收对象。在输出结果中,我们可以看到,b 中的弱引用 ...
在Java编程中,值拷贝(Value Copy)是一种常见的数据操作,主要用于对象之间的属性值复制。这个主题涉及到Java中的浅拷贝和深拷贝概念,以及如何利用工具库如Apache Commons BeanUtils进行对象属性的便捷复制。 ...
java学习java语言的值传递和引用传递
在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...
在Java中,参数传递有两种方式:值传递和引用传递。这个“Java 值传递Visio资源”包含了几个Visio图形文件,帮助我们直观地理解这两种传递方式。 1. **值传递**: 当方法调用时,对于基本类型(如int, double, char...
Java中,无论是值类型还是引用类型,在作为方法参数传递时,都遵循着一种被称为“按值传递”的机制。这意味着,当我们将一个变量作为参数传递给方法时,实际上传递的是该变量的一个副本。 ##### 1. 值传递 - **原理...
本示例代码是关于如何使用Java来计算文件的MD5哈希值,这对于检查文件在传输或存储过程中是否被篡改非常有用。 首先,我们需要引入Java Cryptography Extension (JCE),它提供了加密和解密的功能,包括MD5算法。在...
Java中的值传递和引用传递是编程中非常重要的概念,它们涉及到函数或方法调用时参数的传递方式。值传递指的是函数或方法接收到的是变量的一个副本,而引用传递则是函数或方法接收到的是变量内存地址的副本。这两种...
Java中的参数传递方式分为两种:一种是按值传递,另一种则是按引用传递。然而,Java实际上只支持按值传递,即便是对象也不例外。这里的“值”指的是基本类型的实际值,以及对象引用的值。 1. **基本类型的参数传递*...