当前位置: 首页 > 面试题库 >

为什么Java不支持像C ++那样通过引用传递

唐睿
2023-03-14
问题内容

我已经阅读了每个原始数据类型和对象引用通过值传递的地方吗?

我曾尝试在Google中搜索为什么Java不支持按引用传递,但 我只得到Java不支持按引用传递, 而且 我找不到背后的任何原因

为什么不能通过引用传递原始数据类型?

编辑: 假定它是主观和争论的,大多数人都关闭了我的问题。

好吧,不是,它有一个明确的答案,我的问题就像你为什么不能创建抽象类的对象,并且它也不是重复的,因为大多数答案都明确地说“不”。

谢谢。


问题答案:

通过设计:

有人会错误地说对象是“通过引用”传递的。在编程语言设计中,术语“按引用传递”正确表示在将参数传递给函数时,调用的函数将获得对原始值的引用,而不是其值的副本。如果函数修改了其参数,则调用代码中的值将被更改,因为参数和参数使用内存中的同一插槽…。Java编程语言不会通过引用传递对象;它按值传递对象引用。由于相同引用的两个副本引用了相同的实际对象,因此通过一个引用变量进行的更改将通过另一个变量可见。仅有一种参数传递模式-
按值传递-有助于简化操作。-詹姆斯·高斯林(James Gosling),

至于更深层次的原因,这是我的看法:这是两个事实的结合:

  1. 高斯林引文的最后一行:“ …可以使事情保持简单…”
  2. 与C ++不同,Java是在堆上分配的所有对象中进行垃圾回收。

如果您不喜欢第一个,我无能为力。您必须告诉James Gosling和Bill
Joy以及其他所有设计Java的人,他们犯了严重错误。祝你好运。通过几种方法,如今Java比C
++广泛使用。尽管市场不完善,但是您并没有因为您的疏忽而对Java进行了惩罚。

C
++中的按值传递给开发人员(例如,分配和复制构造函数的要求)和编译器编写器(例如,区分堆栈变量和堆变量,按值传递和使用const和非const进行引用的所有排列)带来负担。

第二个可能除了设计师的品味之外,还有更多的技术解释。我不是垃圾收集系统的设计和实现专家,但是也许由于我不知道的技术原因影响了他们的选择。



 类似资料:
  • 本文向大家介绍为什么Java不支持<<相关面试题,主要包含被问及为什么Java不支持<<时的应答技巧和注意事项,需要的朋友参考一下 Java添加了运算符“ >>>”来执行逻辑右移,但是由于 逻辑和算术左移运算是相同的 ,因此Java中没有“ <<<”运算符。 来自Java的Shifts …

  • 为什么编译器会抓狂?我应该能够修改返回的对象,如果java返回一个对象引用的权利?

  • 问题内容: 某些哈希表方案(例如布谷鸟哈希或动态完美哈希)依赖于通用哈希函数的存在以及能够收集表现出冲突的数据并通过从通用哈希函数系列中选择一个新的哈希函数来解决这些冲突的能力。 。 不久前,我试图在以杜鹃哈希为后盾的Java中实现哈希表,并遇到了麻烦,因为尽管所有Java对象都有一个函数,但返回的值对于每个对象都是固定的(当然,除非对象更改)。这意味着如果没有用户提供外部家族的通用哈希函数,就不

  • 问题内容: 该程序给出6作为输出,但是当我取消注释第9行时,输出为5。为什么?我认为ba不应更改,主要应保持5。 问题答案: 在Java中传递对象时,它们将作为in 方法中引用的参考含义对象和method 中的参数传递,它们都指向同一对象,因此,当您将值更改为6时,它将反映在方法中。 现在,当您尝试执行此操作时,您将指向另一个对象,但仍指向您在方法中创建的对象,因此更新的值6在main方法中不可见

  • 本文向大家介绍为什么我们在C ++中通过引用传递指针?,包括了为什么我们在C ++中通过引用传递指针?的使用技巧和注意事项,需要的朋友参考一下 如果需要修改指针而不是指针指向的对象,则可以按引用传递指针。 这是如何通过引用传递指针的示例- 示例 输出结果

  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容: