Java面试题:值传递和引用传递有什么区别?

2020年12月18日08:56:54 评论 59

【选自微软笔试题】

试题题面:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是按值传递还是按引用传递?题面解析:本题题目比较长,有些读者可能觉着回答很费劲。其实可以换一种方式来想该问题,即Java中是按值传递还是引用传递?本题的重点是在最后的按值传递还是按引用传递。接下来详细讲解按值传递和按引用传递的区别吧。

Java面试题:值传递和引用传递有什么区别?

解析过程:先来讲解一下什么是值传递和引用传递。

(1)值传递:在方法调用时,实际参数(即实参)把它的值传递给对应的形式参数(即形参),方法执行中,对形式参数值的改变不影响实际参数的值。
按值传递就是将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。

(2)引用传递:也称为传地址。方法调用时,实际参数的引用被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

按引用传递是当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数的值,调用代码中的原始值也随之改变。如果函数修改了该参数的地址,调用代码中的原始值不会改变。

值传递和按引用传递的区别,在Java中只有值传递参数。

(1)当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象引用的一个副本。对象的内容可以在被调用的方法中改变,但对象的引用是不会发生改变的。Java中没有指针,因此没有引用传递。但可以通过创建对象的方式来实现引用传递。

(2)在Java中只会传递对象的引用,按引用传递对象。

(3)在Java中按引用传递对象并不意味着会按引用传递参数。参数可以是对象引用,而Java是按值传递对象引用的。

(4)Java中的变量可以为引用类型和基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的,两种类型都是按值传递。

Java大学
  • 本文由 发表于 2020年12月18日08:56:54
  • 转载请务必保留本文链接:https://www.javadx.com/150.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: