`

java的方法调用,参数是按值传递还是按引用传递

阅读更多
各种语言都涉及到方法调用,一个基本的问题就是:参数是怎么传递的

通常认为有2种方式:按值传递,按引用传递

按值传递指的是,方法内部对参数的赋值,在方法外部对参数无影响;按引用传递则相反。比如
public static void main(String[] args) {

		int i = 2;

		changeNumber(i);

		System.out.println(i);

	}

	private static void changeNumber(int old) {
		old = 3;
	}

上面的代码,如果最后输出的是2,就是按值传递;如果输出3,就是按引用传递

在java里,当然输出的是2。也就是说,java语言的方法调用,是按值传递来处理的

问题是,这种定义不一定是准确的。前面的例子传递的参数是基本类型,但是当传递的参数是对象实例的引用时,就不一样了
public static void main(String[] args) {

		ForTest t = new ForTest(2);
		System.out.println(t.i);

		changeTest(t);
		System.out.println(t.i);

		changeTest2(t);
		System.out.println(t.i);

	}

	public static void changeTest(ForTest t) {
		t = new ForTest(3);
	}

	public static void changeTest2(ForTest t) {
		t.i = 3;
	}

	static class ForTest {

		public int i;

		public ForTest(int old) {
			this.i = old;
		}
	}

可以看到,在方法内部给引用赋一个新的对象,并没有影响:引用本身,仍然是按值传递的。但是在方法内部对引用指向的对象实例做的操作,却是持久性的

所以,不能简单地说java是按值调用或是按引用调用,或许这种定义本身就是不精确的

java的这个特性,也引入了一些影响:

比如由于引用本身是按值调用的,就没有办法在方法内部给参数赋新值了;

比如有时候会不小心在方法内部改变了对象实例的字段,对方法调用者来说,这是不可知的。各种编程规范都不鼓励这种做法,但是在技术上没有办法强制保证这一点
分享到:
评论

相关推荐

    Java:按值传递还是按引用传递详细解说

    在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...

    java 之方法调用 方法传参 值传递还是引用传递字节码

    在Java编程语言中,方法调用和参数...参数传递遵循值传递原则,对于基本类型传递值副本,对于对象类型传递对象引用的副本。通过字节码和开发工具,我们可以更深入地理解这些过程,提升我们的编程技能和问题排查能力。

    java值传递与引用传递

    在Java编程语言中,函数参数的传递方式有两种:值传递和引用传递。理解这两种机制对于编写高效、无误的代码至关重要。以下是对这两种传递方式的详细解析。 首先,值传递是指函数调用时,实际参数的值被复制一份传给...

    java 值传递和引用传递的比较

    在Java编程语言中,了解值传递和引用传递的概念至关重要,因为它们直接影响到函数参数的处理方式。下面将详细探讨这两个概念及其区别。 首先,我们来理解什么是值传递。在Java中,基本数据类型(如int、double、...

    java方法的参数传递其二.docx

    Java 方法参数传递是 Java 编程语言中的一种基本机制,在方法调用时将参数传递给方法体内的变量,但是在传递过程中,参数的类型会对传递结果产生影响。在本文中,我们将讨论 Java 方法参数传递中的引用类型传递。 ...

    Java的按值传递和按引用传递分析.rar

    Java编程语言中有两种参数传递方式:按值传递和按引用传递。理解这两种方式对于编写高效、无误的代码至关重要。...在设计方法时,清楚地知道参数是按值还是按引用传递,能够帮助你编写出更加清晰、可预测的代码。

    Java是值传递,传对象引用也是通过值

    无论是基本类型还是对象类型,参数传递都是以值的形式进行,但对象类型的值是其引用,允许我们在方法内修改对象的状态,而不影响方法外部的引用。这种特性使得Java能够实现封装和数据安全性,同时也为程序员提供了...

    java调用json参数的webservice

    在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...

    Java实验-掌握方法的声明和调用 掌握方法的值传递 掌握方法的重载

    本实验报告涵盖了 Java 编程语言中方法的声明、调用、值传递、重载和 Math 类的使用。通过三个实验,学生掌握了方法的声明和调用、值传递和方法的重载,并熟悉了 Math 类的使用。 一、方法的声明和调用 在 Java 中...

    Java的引用和函数参数传递

    原因是尽管在方法内部交换了参数引用,但这并不会影响到外部的原始引用。 #### 六、深入理解引用传递 - **引用传递的本质**:Java中的引用传递本质上是传递对象的引用,而不是对象本身。这意味着在方法内部对对象...

    值传递和引用传递

    **引用传递**则是指在函数或方法调用时,传递的是实际参数的引用而不是值本身。这意味着形参和实参指向的是同一块内存区域。因此,形参的任何改变都会直接影响到实参。 ##### 3.1 引用传递的特点 - **共享性**:...

    Android原生java语句 和html js互相调用 传递参数

    这样,当Android调用`callJsFunction`时,JavaScript会传递一个消息给Java,Java处理后返回结果,再将结果显示回页面。 总结来说,Android与HTML JavaScript的互调主要依赖`WebView`的`addJavascriptInterface`和`...

    java调用shell(包含有参数的调用)

    总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...

    java调用存储过程(含out参数)

    在这个例子中,`my_procedure`是存储过程名,`123`是传递给存储过程的`IN`参数,而`OUT`参数是一个字符串类型,我们使用`getString()`方法读取。 请注意,不同的数据库可能需要不同的JDBC驱动和特定的语法。上述...

    一文秒懂java到底是值传递还是引用传递

    一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。 通过三个例子,我们可以更好地理解 Java 中的参数传递方式。 在 example 1 中,我们看到,swap 方法并不能修改 num1 和 num2 的值...

    解析Java按值传递还是按引用传递

    "Java按值传递还是按引用传递" Java是一种面向对象的编程语言,在Java中,对于方法的参数传递有两种方式:按值传递和按引用传递。这两种方式都有其特点和应用场景,本文将对这两种方式进行详细的介绍和分析。 一、...

    浅议JAVA语言中的参数传递.pdf

    按值传递是指在方法调用时,传递的参数是按值的拷贝传递。这种方式的特点是,传递的参数值不影响原来的变量值。例如: ```java public class TempTest { private void test1(int a) { a = 5; System.out.println...

Global site tag (gtag.js) - Google Analytics