Java函数传递&返回复杂数据类型

时间:2013-11-27 22:41:12

标签: java parameter-passing

我正在学习Java,并且不禁想知道Java如何传递函数参数和返回值。我做了一些搜索,发现Java只按值传递对象。然而,有些人质疑这一点;他们声称在处理复杂数据类型(不是像int这样的原始数据时)它只传递一个指针。

这是否意味着对本地对象所做的任何更改都会影响原始对象?有没有办法按值传递“PURELY”(即制作一个对象的硬拷贝)?

此外,返回值的真实情况如何?例如,我们使用访问器(或getter函数 - 我不完全确定如何调用它们)来保护ADT的私有属性不被更改为“非法”值。如果Java通过Pointer,那么我对Accessor函数返回的Object所做的任何更改也会影响实际属性,如果它不是原始数据类型,那么它们不是吗?

有人可以帮我澄清一下这些概念吗? 先感谢您! :d

2 个答案:

答案 0 :(得分:2)

关键是要了解Java按值传递所有内容。对于对象也是如此:它通过值传递指针因此,它不会创建对象的副本,而是创建引用的副本。

回归也是如此。所以,是的,你的想法是正确的:你可以修改属性(称为类成员)对象,因为它们以指针的形式返回。这就是为什么(如果需要)某人可以选择设计一个对象在创建后不可修改的类的原因。

答案 1 :(得分:0)

  

我做了一些搜索,发现Java只传递了Objects by   值。

你有困惑。您不能在Java中“传递对象”,因为对象不是Java中的值。 Java中唯一的类型是基本类型和引用类型(引用是指向对象的指针)。因此,您可以在Java中操作的唯​​一值是基元和指向对象的指针。所有类型都按值传递或分配。

相关问题