Java参数传递方式
来源:互联网 发布:投资软件靠谱吗 编辑:程序博客网 时间:2024/05/21 16:22
方法(函数)的参数传递目前分为两种方式:
1.值传递(call by value):表示方法接收的是调用者提供的值;
2.引用传递(call by reference):表示方法节油的是调用者传递的引用(内存地址);
其实还有一种是按照名字传递的(call by name),不过已经成为历史,不再讨论。
那么,Java是按照什么方式进行传递的呢?
先看代码:
public class Test { public static void main(String[] args) { int x = 10; raise(x); System.out.println("结果:"+x); } private static void raise(int x){ x = 3*x; }}//结果:10
可以很清楚看到x的值还是10! 其实,raise()方法中的参数只是接收到x的值得一个拷贝,不是真正的x;在方法内部只是改变了x的拷贝的值,x的值没有改变。
但是,在传递给raise()一个Apple对象会怎样呢?
public class Test { public static void main(String[] args) { Apple x = new Apple(); x.size = 1; raise(x); System.out.println("结果:"+x.size); } private static void raise(Apple a){ a.size = 10; }}class Apple{ int size;}//结果:10
可以看到,Apple对象的size变了!这又是为什么呢? 这个时候,传递的参数也是按值传递的,传递的是Apple对象x引用的拷贝,就是方法参数a是x引用的拷贝,他们同事指向同一个对象Apple;当a对Apple对象更改时,x引用的Apple当然也会更改!
最后证明:
public class TestValuePass { public static void main(String[] args) { Apple a1 = new Apple(10); Apple a2 = new Apple(20); swap(a1,a2); System.out.println("Apple-1=="+a1.getSize()); System.out.println("Apple-2=="+a2.getSize()); } private static void swap(Apple a1,Apple a2){ Apple temp = a1; a1 = a2; a2 = temp; }}class Apple{ private int size; public Apple(int size) { super(); this.size = size; } public int getSize() { return size; } public void setSize(int size) { this.size = size; }}//Apple-1==10//Apple-2==20
swap()方法在交换两个对象的引用,但是最终是没有成功的!
所以,很明确的认识到Java是按值传递的!
阅读全文
0 0
- Java参数传递方式
- Java参数传递方式
- Java参数传递方式
- java 参数传递方式
- java 参数传递方式
- Java参数传递方式
- Java参数传递方式
- Java参数传递方式
- java参数传递方式
- Java参数传递方式
- Java参数传递方式
- Java 参数传递方式
- Java参数传递的方式
- Java参数传递方式总结
- Java参数传递方式总结
- Java参数传递方式总结
- Java中的参数传递方式
- java参数传递方式问题
- Spring JPA 使用EntityManager时如何配置多数据源的事物管理
- Java计算两个具体日期相差的天数
- easyui----行内编辑---有单价 输入数量自动计算总金额
- LeetCode 389. Find the Difference
- 使用GreenDao3.0实现一个记事本App
- Java参数传递方式
- FILTER:progid:DXImageTransform.Microsoft.Gradient使用
- Kali Linux进行内网攻击--》使用arpspoof
- java基于StringBuilder自己实现myArrayList
- 对SSH(Struct、Spring、Hibernate)框架的理解
- Java后台之路(19)-MyBatis之xml配置
- VINS ---初始化
- 二叉搜索树详解链式与数组式实现
- nyoj-58 最少步数