【发布时间】:2011-05-07 15:40:08
【问题描述】:
据说在Java中方法参数是按值传递的,对于基元和对象来说都是如此,对象的引用是按值传递的。为了说明考虑代码:
class Test {
private static void dateReplace (Date arg) {
arg = new Date (arg.getYear(), arg.getMonth(), arg.getDate() +1);
System.out.println ("arg in dateReplace: " + arg);
}
public static void main(String[] args) {
Date d1 = new Date ("1 Apr 2010");
dateReplace(d1);
System.out.println ("d1 after calling dateReplace: " + d1);
}
}
this will print:
arg in dateReplace: Fri Apr 02 00:00:00 2010
d1 after calling dateReplace: Thu Apr 01 00:00:00 2010.
产生相同结果的 C++ 等价物是什么?
什么是 C++ 等效项,它在调用方法后将 d1 的值与方法内的值相同,即调用者看到修改后的值?
【问题讨论】:
-
这是作业吗?您可能想了解 C 的 *(间接)和 &(引用)运算符。
-
@eggyal C 和 C++ 都没有引用运算符 - & 是运算符的地址。
-
@unapersson:有什么区别? :s
-
@eggyval 在 C++ 中,指针和引用的处理方式不同。
&foo为您提供指向foo的指针,处理它需要您使用指针语法(例如,您必须使用->运算符访问成员)。当你通过引用传递一个对象时,它就像一个值一样(你使用.操作符来访问成员)。 -
@Alan,它发生在很多年前,当时我试图弄清楚面向对象的编程,当我看到它在汇编程序中的样子时,我终于成功了。要实现 Java 在 C++ 中所做的事情,您只需按值传递原语并按指针传递对象。由于没有明确的 GC,如果您碰巧创建了一些对象,您可能需要释放/删除对象。