隐式vs显式传递对象

时间:2012-11-21 17:30:09

标签: java parameter-passing

C函数和java方法的区别之一是对象在C中显式传递,在Java中隐式传递, 任何人都可以提供隐式和显式传递的示例吗?

2 个答案:

答案 0 :(得分:3)

我不确定你的意思,但也许你正在寻找如何在C中实现面向对象的风格。

Java是一种真正的面向对象语言。这意味着它有类和对象。当您编写一个需要访问它被调用的对象的方法时,可以使用this关键字,该关键字引用相关对象:

int getSomething()
{
    return this._something;
}

因此this关键字的实际值取决于对象 - 然后将其视为参数的隐式参数。

然而,在C中,没有真正的类或对象。如果你想要实现OO风格的代码,你必须传递对应于Java的this的参数(即你正在调用“方法”的“对象”)显式到功能。例如,在cURL网络库中:

CURL *hndl = curl_easy_init();
curl_easy_setopt(hndl, CURLOPT_URL, "http://example.com");
curl_easy_perform(hndl);

大致相当于这样的一些OO代码:

CURL hndl = new CURL;
hndl->setopt(CURLOPT_URL, "http://example.com");
hndl->perform();

请注意,在C中,在以此样式编写代码时,“对象”通常称为“上下文”或“句柄”。

答案 1 :(得分:1)

至少在Java中如果通过引用传递,传递的引用,我记得它在C中调用的指针是原始指针的COPY而不是原始指针本身。

所以有一个内存区域包含有关该对象的信息。然后有一个指向该内存区域的指针。当Java通过引用传递时,它首先复制指向内存区域的指针,然后将指针的COPY作为参数传递。

这一切都与其他通过引用完全分开并通过值区分。