C++/Java引用变量

C++/Java引用变量,java,c++,variables,pointers,reference,Java,C++,Variables,Pointers,Reference,在Java中,当我 Foo bar = new Foo(); bar将是一个包含新构造对象地址的变量。我的教授称之为参考变量 前一行在C++中与此等效: Foo *bar = new Foo(); Foo bar; 这里,bar是指向对象的指针 那么,Java中的引用变量基本上是指针,这是真的吗 另外,当我在C++中执行此操作时: Foo *bar = new Foo(); Foo bar; 条形图也是指针吗?如果不是,那么这是否意味着两者之间的记忆结构存在差异 Foo bar; 及

在Java中,当我

Foo bar = new Foo();
bar将是一个包含新构造对象地址的变量。我的教授称之为参考变量

前一行在C++中与此等效:

Foo *bar = new Foo();
Foo bar;
这里,bar是指向对象的指针

那么,Java中的引用变量基本上是指针,这是真的吗

另外,当我在C++中执行此操作时:

Foo *bar = new Foo();
Foo bar;
条形图也是指针吗?如果不是,那么这是否意味着两者之间的记忆结构存在差异

Foo bar;

?

那么,Java中的引用变量基本上是指针,这是真的吗

-->简言之,是的!但是,由于C++允许您操纵指针,java不需要。(类似的词是很好的区分)

-->在java中,这只是类型为
Foo
bar
的声明

c++
中,对象可以保存在
stack
上,也可以保存在
heap
上,而在
Java
中,对象只存储在heap上,而指向对象的对象引用则存储在stack上

Foo*bar=new Foo();//CC++:*bar在堆栈上,内存分配在堆

上 Foo bar=new Foo();//Java:堆栈上的条和使用new创建的对象位于堆上


如果考虑到每种语言的规范,您想知道术语“指针”是否适合每种语言,那么是的

中,Java引用称为“指针”:

对象是类实例或数组

引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象

<> >在C++语言规范(国际ISO标准,C++标准>强>)中,C++指针称为指针。 另外,当我在C++中执行此操作时:

Foo *bar = new Foo();
Foo bar;
富吧;条形图也是指针吗?如果不是,那是否意味着存在 两者在记忆结构上的差异

Foo bar;
富吧

它不是指针。它只是在堆栈上创建的对象

在Java中,所有对象都是引用或指针,或者使用
new
C++指针和java“指针”的区别在于,java中不能有指针运算。
上次我读Java编程语言时,它说引用是指针 然而,
Foo-bar
Foo*bar=newfoo()有很大不同。第一个创建一个具有自动持续时间的Foo实例。它将在创建它的块的末尾被销毁。第二个创建一个动态分配的Foo实例。它将一直保留,直到被明确删除

如果希望在函数返回后对象存在,则不能使用第一个。如果在函数返回后使用指针或对它的引用,则会发生不好的事情。在这种情况下,您必须使用第二种形式


第一种形式的优点是您不必担心内存管理。它将在其作用域结束时自动销毁。对于第二个表单,您必须手动删除它,或者使用某种智能指针来管理它。

如果您想挑剔,它们实际上并不完全像指针:

  • Java指针不允许使用指针算术。不能对指针进行递增、递减、乘法等操作来移动它们在内存中指向的内容
  • 不是强类型。在C中,您可以将指针从一种类型强制转换为几乎任何类型,而不会产生任何后果(只要小心)。在Java中,如果尝试在不兼容的类型之间进行强制转换,则会出现异常

  • 否则,它们的行为与指针几乎相同,只要您不需要C风格指针的上述任何功能,您可能不会注意到它们之间的差异。

    指针是表示内存地址的值。
    引用是引用对象的值。
    指针是实现引用的一种方法。事实上,有几种方法可以使用指针实现引用,因为大多数对象占用多个地址,所以必须定义引用点指向哪个地址

    一些不同之处:

    • 你可以用指针做数学运算,因为地址是整数值。参考值没有固有的含义,它只是表示一个对象
    • 指针可以指向任何值,例如,对象中的字段;引用始终表示整个对象

    将它们与帕斯卡指针进行比较会更准确。它们有许多相同的特征:强类型、无算术、可以为空。< /p>和C++具有不同的java语义引用。C++自动存储(栈)有时会用微软的C++(我仍然认为有人应该被公开)来走出窗口(原谅双关语)。.很好的总结:不仅仅是在JLS中。当您尝试取消对空引用的引用时,得到的异常是广受欢迎的
    NullPointerException
    (而不是
    NullReferenceException
    )。所以我想说,是的,Java的设计者肯定认为引用是指针式的这里用C++表示。