- A+
所属分类:Java

Java语言中的方法参数有两种:
1、基本数据类型(数字、布尔值)
2、对象引用
基于方法参数的传递有两种方式:值传递和引用传递。
值传递表示方法接收的是调用者提供的值。
引用传递表示方法接收的是调用者提供的变量地址。
Java程序设计语言总是采用按值传递的方式,也就是说,方法得到的是所有参数值的一个拷贝,特别是方法不能修改传递个它的任何参数变量的内容。
先用基本数据类型作为参数来举个栗子:
public static void methodA(double i){ i = 3 * i; System.out.println(i); } double i = 3.0; methodA(i); System.out.println(i);
将 i 作为参数传递至methodA方法中,此时的 i 是作为参数值的一个拷贝,属于值传递,那么调用者和被调用者是两个不同的变量,方法体里面对变量的改变,不会影响方法体外面的变量。
如果将实例对象作为参数进行传递:
public static void plus(carc){ c.setPrice(c.getPrice() * 3); } car c = new car(3.0); plus(c); System.out.println(c.getPrice());
将car的实例对象c作为参数传递至plus方法中,此时的 c 对象是作为参数值的一个拷贝,属于引用传递,那么调用者和被调用者用的是相同的变量,如果在方法体内部对变量进行修改,会影响方法体外的变量。
那么实例对象作为参数进行传递,就是属于引用传递吗?这里可做一个反例来说明。
public staticvoid changeName(carc){ c = new car(); c.setName("奔驰"); } car c = new car(); c.setName("奥迪"); changeName(c); System.out.println(c.getName());
将实例对象car传入changeName方法中,c作为拷贝对象进行传递,方法中对c实例再次进行实例化,并且赋予参数状态,方法中的c对象更改属性状态,并不会影响方法外的c实例属性,changeName方法结束后,方法中的c实例便会被废弃掉,所以最终会输出“奥迪”。
表明方法中如果对象作为参数的话,属于值传递,并非引用传递。
总结:
方法不能修改一个基本类型的参数(即数值型和布尔型)
方法可以改变一个对象参数的状态
方法不能让对象参数引用一个新的对象
- 我的微信
- 加好友一起交流!
-
- 微信公众号
- 关注公众号获取分享资源!
-
2019年11月25日 下午6:23 沙发
大佬,今天终于搞懂了