Java_引用和值传递

一、构造方法

1、方法名称必须与类名一致;
2、Java默认提供一个没有参数的构造方法,会将参数自动赋值为0;
3、只有在创建对象的时候才能调用构造方法,作用:给对象的属性初始化;
4、当类中有了带参数的构造方法后,无参的构造方法就失效了;

	格式:
	public void 类名(参数类型 参数名,....{
		方法体
	}
	int age;
	//无参构造方法
	public People() {
		System.out.println("对象创建了...");
	}
	//有参数的构造方法
	public People(int age) {
		this.age = age;
	}

tips:
可以在eclipse中 右键->source->Generate Constructor using fields 一次性生成构造方法。

二、传值和传引用

基本类型:int float double long short boolean char byte 存储的是具体的值
引用类型:类、接口、数组 存储的是能找到对象的引用

首先,来看一下Java中的值传递。

	People.java
	public class People {
		int age;
	public People(int age) {
		this.age = age;
	}
	public static void main(String[] args) {
		People p = new People(10);
		Change c = new Change();
		System.out.println(p.age);
		c.changeAge(p.age);
		System.out.println(p.age);
	}
}
	Change.java
	public class Change {
	public void changeAge(int age) {
		age = 20;
	}
	public void changePeople(People p) {
		p.age = 30;
	}
	
}

Pepole类里面有个属性age,创建一个People对象时,将age赋为10,接着调用Change类中的changeAge()方法来修改p.age的值。
猜一下最终运行的结果是什么?
p.age的值是10还是30?

没错,p.age的值还是10,没有发生改变,这是为什么呢,我们刚刚不是调用了changeAge()方法修改了p.age的值吗?
来看一下刚刚这个过程发生了什么:
首先 p.age = 10;
接着将p.age的值赋值给了age
age = p.age = 10;
此时这里
public void changeAge(int age) {
age = 20;
}
修改的是age的值,
p.age = 10;
age = 20;
所以打印更改前后p.age的值都是10没有发生改变。

接着,来看一下Java中的引用传递

	public class People {
		int age;
	public People(int age) {
		this.age = age;
	}
	public static void main(String[] args) {
		People p = new People(10);
		Change c = new Change();
		System.out.println(p.age);
		c.changePeople(p);
		System.out.println(p.age);
	}
}
	
	public class Change {
	public void changeAge(int age) {
		age = 20;
	}
	public void changePeople(People p1) {
		p1.age = 30;
	}
}

上面说过,引用类型,存储的是能找到对象的引用

对象p创建时,存储了一个引用值指向age,
在changePeople()方法中,p的值赋值给了p1
即p1获得了与p相同的引用值,也指向了age=10;
接着,该方法对p.age进行了修改,变成了30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值