在开始之前先来看看下面这段代码:
public class Test {
private String props;
public String getProps() {
return props;
}
public void setProps(String props) {
this.props = props;
}
public void method(Test test) {
test.setProps("b");
System.out.println(test.getProps());
test = new Test(); //***请注意这里***
test.setProps("c");
System.out.println(test.getProps());
}
public static void main(String[] args) {
Test ts = new Test();
ts.setProps("a");
// Test ts = new Test();
ts.method(ts);
System.out.println(ts.getProps());
}
}
看完这段代码我相信很多人都有了自己的答案。那么在讨论之前,说明按值传递和按引用传递这两个术语是重要的。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,则仅改变副本,而原始值保持不变;按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。 Java 中的变量可以分为以下两种类型之一:基本类型和引用类型。说到这我想你应该更加坚信自己的答案了(对的或错的),也或者是对这个问题嗤之以鼻。
如果你的答案是:b c c,那你要么是受C++影响太深,要么是被市面上那些滥竽充数的教材所毒害。实际上,这段代码的运行结果是:b c b(当然它们之间有换行)。若这跟你心中的答案是一样的,那么我建议你关掉此网页,去别处逛逛吧,它不适合你。
Java 语言有基本类型和对象引用类型,因此认为 Java 对基本类型使用按值传递,而对引用使用按引用传递是符合逻辑的。很容易就会相信这一点,实际上有很长一段时间我也认为是这样,但这不正确。
在 Java 中,当对象引用是传递给方法的一个参数时,你传递的是该引用的一个副本(按值传递),而不是引用本身。请注意,传给方法的副本跟对象引用都指向同一个对象。Java 在参数传递中,处理基本类型和引用类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。这是一个重要特性,正如上面的代码运行结果所表现的那样。也就是说,Java 按值传递所有参数,即制作所有参数的副本,而不管它们的类型。
我必须承认,我曾一直认为因为 Java 有两种类型,所以他们按值传递基本类型而按引用传递引用类型,就像 C++ 那样。但是,当我理解了发生的事情,我就开始相信 Java 按值传递所有参数的方法更加直观。The Java Programming Language,Second Edition 的作者,Ken Arnold 和 James Gosling 在 2.6.1 节中说得好:“在 Java 中只有一种参数传递模式 - 按值传递 --- 这有助于使事情保持简单。”
分享到:
相关推荐
在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
作为一门广泛使用的编程语言,Java提供了多种参数传递的方式,这其中包括了基本类型的值传递以及引用类型的地址传递。同时,文章还涵盖了可变参数列表(varargs)的使用方法以及如何在方法中正确地定义和使用返回值...
本文将重点讨论Java中方法调用时的基本类型和引用类型参数传递的区别,并通过具体的示例帮助读者更好地理解和掌握这一核心概念。 #### 学习目标 - **理解参数传递的基本原理**:了解Java方法调用过程中如何将参数...
在Java中,所有的参数传递都是按值传递,但这并不意味着Java没有引用传递的概念。实际上,Java通过传递对象引用的方式,实现了类似引用传递的效果。以下是对这两种传递方式的详细解释。 1. 按值传递 按值传递是指...
在Java编程语言中,函数参数的传递方式有两种:值传递和引用传递。理解这两种机制对于编写高效、无误的代码至关重要。以下是对这两种传递方式的详细解析。 首先,值传递是指函数调用时,实际参数的值被复制一份传给...
通过上述分析,我们可以清楚地了解到Java中引用和函数参数传递的基本概念以及它们的具体应用。了解这些概念对于正确使用Java进行编程非常重要,尤其是在处理复杂的数据结构和对象交互时。希望本文能帮助读者更好地...
在Java编程语言中,了解值传递和引用传递的概念至关重要,因为它们直接影响到函数参数的处理方式。下面将详细探讨这两个概念及其区别。 首先,我们来理解什么是值传递。在Java中,基本数据类型(如int、double、...
62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....
Java中,无论是值类型还是引用类型,在作为方法参数传递时,都遵循着一种被称为“按值传递”的机制。这意味着,当我们将一个变量作为参数传递给方法时,实际上传递的是该变量的一个副本。 ##### 1. 值传递 - **原理...
Java 语言中参数值传递和引用传递是两种不同的参数传递方式,它们在 Java 编程中扮演着重要的角色。参数值传递是指将实际参数的值复制给形式参数,形式参数的变化不影响实际参数的值。引用传递是指将实际参数的引用...
Java参数传递机制是一个常见的面试问题,它涉及到Java语言的基础特性。Java中参数传递的方式有两种理解:值传递和引用传递,但这两种说法实际上是对同一种机制的不同角度的描述。下面将详细解释这两种理解方式。 ...
Java的参数传递方式实际上是一种特殊的"值传递",通常被称为"按引用传递对象的引用",这与C++等语言中的引用传递有所不同。以下是对这个主题的详细解释。 在Java中,所有的参数传递都是基于值的,但这涉及到一个...
Java编程语言中有两种参数传递方式:按值传递和按引用传递。理解这两种方式对于编写高效、无误的代码至关重要。 1. **按值传递(Pass by Value)** - Java中的基本类型(如int, double, char等)是按值传递的。这...
在编程语言中,值传递和引用传递是函数参数传递的两种基本方式,它们涉及到内存管理、数据安全以及程序效率等多个重要方面。这篇文章将深入探讨这两种传递方式,并通过内存解析来帮助理解它们的工作原理。 首先,...
在Java编程语言中,关于参数传递的方式存在两种基本类型:按值传递和按引用传递。这两种方式直接影响着程序的执行逻辑以及对象的状态变化。对于初学者来说,理解和区分这两种传递方式是非常重要的。本文将详细介绍...
在本文中,我们将讨论 Java 方法参数传递中的引用类型传递。 在 Java 中,引用类型包括类、接口、数组等,都是对象的引用。这些引用类型在传递过程中,会将对象的引用传递给方法体内的变量,而不是对象的副本。因此...
Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递中,函数或方法接收的是原始数据类型(如int、double、boolean)参数的副本。例如,如果有一个方法...
标题“Java是值传递,传对象引用也是通过值”揭示了Java中参数传递的核心概念。Java总是以值传递方式进行,这意味着当你将一个变量作为参数传递给方法时,传递的是该变量所存储值的一个副本。然而,对于对象类型的...
Java编程语言中的参数传递机制...总的来说,Java的参数传递机制对于基本类型是按值传递,对于对象类型则是按引用传递,实际上传递的是对象引用的副本,而不是对象本身。理解这一点对于编写Java代码和调试问题至关重要。