当一个对象被当作参数传递到一个方法后,此方法可改变这个 对象的属性,并可返回变化后的结果,那么这里到底是值传递还 是引用传递?

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对象的引用(对象的内存地址)是永远不会改变的

在Java编程语言中,确实是采用值传递的方式传递参数。当一个对象实例作为参数传递给方法时,实际上传递的是对该对象的引用的副本。也就是说,方法内部使用的是引用的副本,而不是原始引用本身。

使用一个生活的比喻来解释这个概念,我们可以将对象比喻为一辆汽车而引用则可以看作是车库的门牌号。假设有一个方法 `driveCar`,它接受一辆汽车作为参数。

当我们调用 `driveCar(car)` 时,实际上是将车库的门牌号复制一份,然后将这份门牌号交给方法 `driveCar`。在方法内部,它使用这份门牌号来指向实际的汽车。

如果在方法内部对汽车的某些属性进行修改,比如将汽车的颜色改为蓝色,则相当于通过门牌号找到对应的汽车,并对汽车进行修改。这样,在方法执行后,原始的门牌号指向的汽车的颜色也会变为蓝色。但需要注意的是,即使在方法内部修改了汽车的属性原始的门牌号仍然指向同一辆汽车,没有改变。也就是说,方法中对引用(对于副本引用的)的任何修改都不会影响原始的引用(原始的引用)。

通过这个比喻,我们可以理解对象引用是如何在方法调用过程中传递的。虽然使用副本的引用可以改变对象的属性,但原始引用始终指向同一个对象的内存位置,引用是不会改变的仅仅只是引用的值传递,但可以通过引用找到其对象进行操作

C++和 C#中可以通过传引用或传输出参数来改变传入的参数的值。

补充:Java 中没有传引用实在是非常的不方便,这一点在 Java 8 中仍然没有得到改进,正是如此在Java编写的代码中 才会出现大量的Wrapper类
(将需要通过方法调用修改的引用置于一个 Wrapper 类中,再将 Wrapper 对象传入方法,这样就可以通过Wrapper 对象的引用副本来修改需要修改的引用,因为java中只有值传递,传引用过去 原始引用 也是不可以修改的,只能通过副本引用修改此 原始引用 指向的对象, 所以如果你要修改此原始引用的话则需要通过Wrapper类在外面套一层然后传入方法中,这样你就可以通过Wrapper类的副本引用来改变原始引用的地址了 )
User user=new User();                            ---user原始引用
UserWrapper userWrapper=new UserWrapper(user);    ---userWrapper原始引用
func1(userWrapper)                                ---func1方法传入userWrapper副本引用
func1中可以对userWrapper副本引用指向的UserWrapper(user)中的user原始引用进行修改
userWrapper.user.sleep();//User中的sleep()方法
=========================================================================

在Java中,对于引用类型的变量,它们存储的值实际上是对象的引用,而不是对象本身。引用是一个指向对象在内存中存储位置的值,可以看作是对象的内存地址。

当我们使用引用变量时,实际上是在操作对象的引用而不是对象本身。引用提供了对对象存储位置的访问和操作,可以通过引用来获取对象的属性、调用对象的方法等

因此,可以说引用存储对象的内存地址,它用于定位对象在内存中的位置不过需要注意的是,引用并不是真正的地址,而是Java虚拟机在内部使用的一种抽象概念。它隐藏了底层的实现细节,使我们可以方便地使用对象而不必关心对象在内存中的具体位置。

引用是对象的内存地址,引用在Java中通常被认为是指向对象的内存地址。当我们创建一个对象时,实际上在堆内存中分配了一块内存空间,并将该对象的引用存储在栈内存中。在使用引用时,我们实际上是在操作这个引用所指向的对象。

通过引用,我们可以获取对象的属性值、调用对象的方法等。当我们对一个引用进行赋值操作时,实际上是将一个对象的地址赋给了这个引用,使得它指向了新的对象,但是原始引用指向的还是原始对象====仅仅只是值传递

=========================================================================

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值