java面对对象04_数据传递

java中没有指针(所以没有引用传递),方法中所有参数都是值传递, 传递的是值的副本。

1.基本数据类型传递

实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。

【示例】交换两个变量的值

public class ObjectDemo {
	public static void main(String[] args) {
		int a = 10, b = 20;
		// 输出:交换之前:a:10 b: 20
		System.out.println("交换之前:a:" + a + " b: " + b);
		// 交换变量a和b的值
		swap(a, b);
		// 输出:交换之后:a:10 b: 20
		System.out.println("交换之后:a:" + a + " b: " + b);
	}
	// 交换两个变量的值
	public static void swap(int num1, int num2) {
		int temp = num1;
		num1 = num2;
		num2 = temp;
	}
}

总结: 方法调用时,实参把值拷贝给形参,在函数中交换的是那份拷贝的值,而不是实参数据本身。所以方法内部修改形参的值, 在方法外部的实参不会跟着形参一起改变。

2.引用数据类型传递

实际参数把它的值传递给对应的形式参数,方法执行中形式参数的改变直接影响实际参数。

【示例】交换两个变量的值

// 坐标类
class Point {
	// 成员变量
	double x;
	double y;
	// 构造方法
	public Point(double x, double y) {
		this.x = x;
		this.y = y;
	}
}
// 测试类
public class PointTest {
	public static void main(String[] args) {
		// 创建一个坐标对象
		Point point = new Point(10.0, 20.0);
		// 输出:交换之前:x: 10.0 y:20.0
		System.out.println("交换之前:x: " + point.x + " y:" + point.y);
		// 交换point中x和y的值
		swap(point);
		// 输出:交换之后:x: 20.0 y:10.0
		System.out.println("交换之后:x: " + point.x + " y:" + point.y);
	}
	// 交换坐标对象中x和y的值
	public static void swap(Point point) {
		double temp = point.x;
		point.x = point.y;
		point.y = temp;
	}
}

方法调用时,实参存放的地址被传递给方法中相对应的形参,因此形参和实参都指向堆中同一块地址,在方法执行中,对形参的操作实际上就是对实参的操作。所以在方法操作形式参数,那么方法外部的实参也会跟着一起改变。

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了33 篇原创文章 · 获赞 0 · 访问量 307

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104581589