各种语言都涉及到方法调用,一个基本的问题就是:参数是怎么传递的
通常认为有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的这个特性,也引入了一些影响:
比如由于引用本身是按值调用的,就没有办法在方法内部给参数赋新值了;
比如有时候会不小心在方法内部改变了对象实例的字段,对方法调用者来说,这是不可知的。各种编程规范都不鼓励这种做法,但是在技术上没有办法强制保证这一点
分享到:
相关推荐
NULL 博文链接:https://m635674608.iteye.com/blog/1513061
java调用json参数的webservice 涉及技术: JAVA JSON WEBSERVICE
简单webview嵌套html文件,原生和js互相调用方法,互相传递参数并打印都页面上
java调用shell 包含简单的编写shell文件 调用含有参数的shell文件
通过对典型程序的研究与分析可以看出JAVA语言的参数传递总是传值调用的,但是对于基本类型的参数和对象类型的参数来说,参数传递的情况不完全相同.Java语言不能直接使用传引用调用,但是可以通过数组的方式模拟传引用...
Java实验-掌握方法的声明和调用 掌握方法的值传递 掌握方法的重载
java调用shell向DataX传递参数,where条件,包含特殊字符。java调用shell向DataX传递参数,where条件,包含特殊字符
然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string类型能正常传递参数外,q其他类型的参数不是默认值就是...
值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递:是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的...
读者将学习Java中方法调用时的参数传递方式,并重点探讨基本类型和引用类型在参数传递过程中的特点和区别。此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 ...
读者将学习Java中方法调用时的参数传递方式,并分别介绍基本类型和引用类型在参数传递过程中的特点和区别。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和...
函数调用参数传递类型(java)的用法介绍..ppt
lotus domino java代理_获取传递值json
方法的值传递 目录 课程导入 理解方法调用时参数的顺序匹配 理解方法调用时值传递 方法调用时,需要提供实参,它们必须与方法签名中所对应的形参次序相同,这称作参数顺序匹配。 参数顺序匹配 public static void ...
java调用.net的webservice传字符串参数,axis方式和xfire方式的使用说明及相关jar包。
Bartender提供了.net的开发sdk,但是没有提供java的,使得java开发者调用Bartender实现模板打印比较困难。本示例是结合Bartender官方资料,利用java通过COM组件方式实现可传递参数的模板打印。
此程序demo详细描述的从发布接口到调用接口的全部过程,详细描述了Xfire调用webservice参数无法传递的问题。
java调用远程接口传输数据的demo
JNI开发Java调用C传递int、String、Array类型参数; 详情参考: int类型: (https://blog.csdn.net/niuba123456/article/details/80959892) String类型(https://blog.csdn.net/niuba123456/article/details/80977247);...
java中两种方式调用其他.exe可执行程序