各种语言都涉及到方法调用,一个基本的问题就是:参数是怎么传递的
通常认为有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中,基本数据类型(如int、double、...
Java 方法参数传递是 Java 编程语言中的一种基本机制,在方法调用时将参数传递给方法体内的变量,但是在传递过程中,参数的类型会对传递结果产生影响。在本文中,我们将讨论 Java 方法参数传递中的引用类型传递。 ...
Java编程语言中有两种参数传递方式:按值传递和按引用传递。理解这两种方式对于编写高效、无误的代码至关重要。...在设计方法时,清楚地知道参数是按值还是按引用传递,能够帮助你编写出更加清晰、可预测的代码。
无论是基本类型还是对象类型,参数传递都是以值的形式进行,但对象类型的值是其引用,允许我们在方法内修改对象的状态,而不影响方法外部的引用。这种特性使得Java能够实现封装和数据安全性,同时也为程序员提供了...
在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...
本实验报告涵盖了 Java 编程语言中方法的声明、调用、值传递、重载和 Math 类的使用。通过三个实验,学生掌握了方法的声明和调用、值传递和方法的重载,并熟悉了 Math 类的使用。 一、方法的声明和调用 在 Java 中...
原因是尽管在方法内部交换了参数引用,但这并不会影响到外部的原始引用。 #### 六、深入理解引用传递 - **引用传递的本质**:Java中的引用传递本质上是传递对象的引用,而不是对象本身。这意味着在方法内部对对象...
**引用传递**则是指在函数或方法调用时,传递的是实际参数的引用而不是值本身。这意味着形参和实参指向的是同一块内存区域。因此,形参的任何改变都会直接影响到实参。 ##### 3.1 引用传递的特点 - **共享性**:...
这样,当Android调用`callJsFunction`时,JavaScript会传递一个消息给Java,Java处理后返回结果,再将结果显示回页面。 总结来说,Android与HTML JavaScript的互调主要依赖`WebView`的`addJavascriptInterface`和`...
总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...
在这个例子中,`my_procedure`是存储过程名,`123`是传递给存储过程的`IN`参数,而`OUT`参数是一个字符串类型,我们使用`getString()`方法读取。 请注意,不同的数据库可能需要不同的JDBC驱动和特定的语法。上述...
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。 通过三个例子,我们可以更好地理解 Java 中的参数传递方式。 在 example 1 中,我们看到,swap 方法并不能修改 num1 和 num2 的值...
"Java按值传递还是按引用传递" Java是一种面向对象的编程语言,在Java中,对于方法的参数传递有两种方式:按值传递和按引用传递。这两种方式都有其特点和应用场景,本文将对这两种方式进行详细的介绍和分析。 一、...
按值传递是指在方法调用时,传递的参数是按值的拷贝传递。这种方式的特点是,传递的参数值不影响原来的变量值。例如: ```java public class TempTest { private void test1(int a) { a = 5; System.out.println...