Java 参数传递我的理解

引言

Java中的对象是值传递还是引用传递?
我个人认为,如果没有学习过c++的小伙伴,对引用这个概念可能只有JAVA的4种引用类型和引用队列这个概念。那么参数的传递是引用还是值传递呢?
想看C++的往这看 c++ 左值 右值 拷贝构造 移动构造

基本编程入门大家都学过最简单的语言:C语言(语法简单,函数式编程,无面向对象),其中相信大家都接触过指针和引用这2个类型,这里为什么说到C语言,因为这2种参数传递类型对下面的内容有些用处。在JAVA中对象参数的传递到底是引用还是值传递?

对象值传递猜测

首先,如果是值传递,为了不影响之前传进来的实参本体,那么一定会出现临时变量。也就是说,不管我们在方法内如何修改这个对象,被传进来的对象本体是不会有任何改变的。

class User{
	private String name;
	public String getName(){ return this.name; }
	public void setName(String name){ this.name = name; }
}

User user = new User();
user.setName("张三");
System.out.println(user.getName());

change(user);
System.out.println(user.getName());

void change(User user){
	user.setName("李四");
}

如果是值传递,那么在
change(user);
System.out.println(user.getName());
这个时候,输出的应该还是张三,而不是李四,因为传递参数会拷贝一份临时变量。方法内对user对象的所有修改,都不会对实参本体造成任何影响。
但显然,Java 中产生了影响,所以对象本身的值传递排除。

对象引用传递猜测

class User{
	private String name;
	public String getName(){ return this.name; }
	public void setName(String name){ this.name = name; }
}

User user = new User();
user.setName("张三");
System.out.println(user.getName());

delete(user);
System.out.println(user.getName());

void delete(User user){
	user = null;
}

如果是引用传递,那么在
delete(user);执行后
System.out.println(user.getName()); 打印应该会报空指针异常,因为引用传递后,我们在delete中将user赋值为了null.
但是Java中明显没有出现这个错误,那么对象本身的引用传递也排除了。

思考

对象本身值传递被排除,引用传递也被排除,那到底是什么传递?
有没有想到C语言中的指针呢?
我们可以不可以认为,Java中对象的参数传递,实际上就是对象引用的一个副本,你可以使用它来调用对象方法,修改对象中的成员变量,但无法对对象本体做修改。

总结

那么总结下来就是Java中对象的参数传递,还是值传递,只不过不是对象的副本,而是对象引用的副本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没事干写博客玩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值