不管你传的是什么,传过去的都只是参数拷贝的一个副本而已,这个副本作为方法的局部变量保存在栈中。
如果传的是基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,仅仅只是一个副本。
如果传的是一个对象的引用,也是一样的,也是一个副本,但是这个副本和作为参数传进来的那个引用指向的是内存中的同一个对象,所以你可以通过这个副本操作那个对象。但是如果你修改这个引用本身,比如让他指向内存中的另外一个对象,原来作为参数传进来的那个引用不会受到影响。
public class Reference {
private int i;
public Reference(int i) {
this.i = i;
}
public void switchparam(int i) {
i = 10;
}
public void switchsobject(Reference r) {
r = new Reference(100);
}
public void switchparam(Reference r) {
r.i = 1000;
}
public void getI() {
System.out.println( "reference i="+i);
}
public static void main(String[] args) {
/**把基本类型作为参数进行传递**/
Reference ref=new Reference(10);
ref.switchparam(ref.i);
ref.getI();
/**把引用作为参数进行传递**/
ref.switchsobject(ref);
ref.getI();
/**把引用作为参数进行传递,改变引用所指向对象的属性**/
ref.switchparam(ref);
ref.getI();
}
}
reference i=10
reference i=10
reference i=1000
分享到:
相关推荐
"java中传值还是传引用的认识" Java 中的参数传递是值传递还是引用传递?这是一个经常引发讨论的问题。在 Java 中,参数传递是按值传递的,也就是说,传递给方法的参数是一个副本,而不是原始值本身。 当一个对象...
### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...
在计算机编程领域,特别是对于面向对象语言如Java而言,“传值”与“传引用”的概念是理解数据传递机制的关键所在。Java作为一种广泛使用的高级编程语言,在设计之初就考虑到了如何避免C/C++等语言中的复杂性,特别...
在Python中,函数参数的传递并不是简单的“传值”或“传引用”,而是采用了所谓的“传对象引用”或者叫做“对象拷贝”的方式。让我们通过实例来深入理解这个概念。 首先,值传递是指函数接收到的是实参的副本,对...
接下来,我们讨论传引用。在Java中,对象类型的参数传递是通过传引用实现的。这意味着当一个对象作为参数传递给方法时,实际传递的是对象引用的副本,而不是对象本身。因此,方法内部可以通过这个引用访问并修改对象...
3. **传对象引用**:Python的参数传递机制,无论传递的是不可变对象还是可变对象,实际上都是传递对象的引用。对于不可变对象,函数内部修改会创建新对象;对于可变对象,函数内部修改会直接作用于原始对象。 4. **...
根据语言特性,参数的传递方式分为传值和传引用两种。传值是指函数接收到的是参数值的一个副本,对副本的修改不会影响原始变量;而传引用则是函数直接操作原始变量,因此能影响到函数外部的变量。 对于JSON,它主要...
接下来,我们讨论对象的参数传递。在Java中,对象是通过引用传递的。这意味着当你将一个对象作为参数传递给方法时,实际上是传递了该对象引用的一个副本。因此,如果在方法内部改变了对象的属性,那么这个变化会影响...
在这个场景下,我们讨论的是通过Notification来实现逆向传值。 首先,我们要理解什么是“逆向传值”。通常情况下,当一个视图控制器(ViewController A)启动另一个视图控制器(ViewController B)时,我们会从B向A...
Python不允许程序员选择采用传值还是传 引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典 或者列表)的引用,就能...
当我们讨论“引用类型传值”时,意味着在方法调用时,传递的是对象引用的一个副本,而不是对象本身。以下是对给定代码清单的详细解释: 1. `Circle.java` 文件定义了一个名为 `Circle` 的类,它包含一个 `double` ...
下面我们将详细讨论这个主题。 一、代理(Delegate)和协议(Protocol) 1. **代理(Delegate)**:在iOS编程中,代理是一种设计模式,允许一个对象与另一个对象进行通信。通常,一个对象(称为委托者,Delegate)...
我们将讨论block的基本概念、如何在iOS中使用block以及在实际项目中实现block反向传值的步骤。 首先,理解什么是block。Block是苹果在Objective-C和Cocoa Touch框架中引入的一种强大的特性,它允许我们在代码中定义...
Block可以捕获并存储其所在上下文中的变量,这使得Block在处理回调、异步操作或者像我们现在讨论的页面间传值时非常有用。 1. **Block定义与类型**: - Block有三种基本类型:全局Block、栈Block和堆Block。全局...
本文将详细讨论如何使用代理(Delegate)模式在两个不同的视图控制器之间进行数据传递。代理模式是iOS开发中一种常用的设计模式,它允许对象间进行松耦合的通信。 首先,理解代理模式的基本概念。代理模式定义了一...
PHP传值赋值和传地址赋值是PHP...通过这些实例和讨论,我们可以看出PHP中的传值赋值和传地址赋值具有不同的特性和适用场景。在实际编程中,应根据具体情况和需要选择最合适的赋值方式,以确保程序的效率和可维护性。
我们将主要讨论手动 segue,因为它是从后向前传值的常用方式。 1. **创建 segue**:在 storyboard 中,选中源视图控制器,然后按住 Control 键,拖动到目标视图控制器上,松开鼠标后选择 segue 类型,如 `Show`、`...
本文将详细讨论C++中几种不同的传值交换方法,并通过实例来解析它们的工作原理。 首先,我们来看最基础的传值交换问题。在标题和描述中提到的代码段展示了如何尝试通过基本类型(如整型)的直接传递来交换两个变量...
Block可以捕获和存储其定义时所在上下文的局部变量,这使得它们在处理回调、异步操作或者像我们现在讨论的跨页面传值时非常有用。 在iOS开发中,我们通常使用导航控制器(UINavigationController)管理多个页面之间...