【问题标题】:Same thing like C++ pointer in Java与 Java 中的 C++ 指针相同
【发布时间】:2012-08-17 11:37:34
【问题描述】:

在 Java 中有什么类似于 C++ 指针的东西吗?如果有,我想知道它是什么。可以举几个例子吗?

【问题讨论】:

  • 不,你到底想达到什么目的!
  • Java 没有指针。使用多态
  • @close-voters:你错了。询问 Java 是否有“指针”(yes,Java 语言规范是这样说的)与询问是否有“与 C++ 指针相同的东西(no,它没有” t). 把握住。答案直接相反,没有重复。

标签: java c++ pointers


【解决方案1】:

Java 的指针(在语言规范中如此称呼,而我相信 Java 程序员大多将它们称为“引用”)不支持 指针算法

而Java没有办法做指针运算。

如果你想在 Java 中做这些低级的事情,一种方法是使用 JNI(Java 本地接口)来访问用 C 或 C++ 编写的代码。

【讨论】:

    【解决方案2】:

    Java 对象模型与 C++ 不同:

    • 在 C++ 中,对于每个 type,您都可以拥有该类型的变量。此外,对于每个非引用类型 T,都有一个类型 T&,您可以拥有该类型的变量(但引用绝不是对象)。

    • 在 Java 中,作为类类型的类型永远不能是变量的类型。类类型的对象只能动态存在,并且声明为T 类型的变量(其中T 是类类型)总是隐含的跟踪引用 em> 到一个对象。 (让我们忽略这个讨论的原始类型。)

    在这两种语言中,变量都是有作用域的。但是,在 C++ 中,您可以利用作用域生命周期,因为生命周期结束的对象会自动调用析构函数。在 Java 中,唯一的变量是引用,并且它们超出范围会做一些非常不同的事情:它通知内存管理器他们正在跟踪的对象现在少了一个引用;如果没有剩余的基础引用,则该对象有资格进行(非确定性)收集。

    如果您愿意,您可以将 Java 中的类类型变量等同于 C++ 中的指针:

    // Java:
    {
        Foo x = new Foo();
        x = new Foo();      // no assignment in Java!
    }
    
    // C++:
    {
        Foo * px = new Foo;
        px = new Foo;       // ... leaks the previous object
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多