首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用指针?

如何在Java中使用指针?
EN

Stack Overflow用户
提问于 2009-11-18 00:34:39
回答 12查看 428.4K关注 0票数 135

我知道java没有指针,但我听说Java程序可以用指针创建,这可以由少数Java专家来完成。是真的吗?

EN

回答 12

Stack Overflow用户

发布于 2009-11-18 00:36:49

由于Java没有指针数据类型,因此不可能在Java中使用指针。即使是少数专家也不能在java中使用指针。

另请参阅中的最后一点:The Java Language Environment

票数 49
EN

Stack Overflow用户

发布于 2009-11-18 00:39:48

Java确实有指针。在Java语言中创建对象时,实际上是在创建指向该对象的指针;然后可以将该指针设置为另一个对象或null,并且原始对象仍将存在(等待垃圾回收)。

在Java中你不能做的是指针运算。你不能取消引用一个特定的内存地址或者增加一个指针。

如果你真的想要实现低级,唯一的方法就是使用Java Native Interface;即使这样,低级部分也必须用C或C++来完成。

票数 49
EN

Stack Overflow用户

发布于 2015-08-05 23:11:17

Java语言中有指针,但不能像在C++或C中那样操作它们。当你传递一个对象时,你是在传递一个指向该对象的指针,但它的意义与C++不同。无法取消对该对象的引用。如果您使用本机访问器设置它的值,它将会改变,因为Java通过指针知道它的内存位置。但是指针是不可变的。当您尝试将指针设置到一个新位置时,您将得到一个与另一个具有相同名称的新本地对象。原始对象保持不变。这里有一个简短的程序来演示它们之间的区别。

代码语言:javascript
复制
import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone {

    public static void main(String[] args) throws java.lang.Exception {
        System.out.println("Expected # = 0 1 2 2 1");
        Cat c = new Cat();
        c.setClaws(0);
        System.out.println("Initial value is " + c.getClaws());
        // prints 0 obviously
        clawsAreOne(c);
        System.out.println("Accessor changes value to " + c.getClaws());
        // prints 1 because the value 'referenced' by the 'pointer' is changed using an accessor.
        makeNewCat(c);
        System.out.println("Final value is " + c.getClaws());
        // prints 1 because the pointer is not changed to 'kitten'; that would be a reference pass.
    }

    public static void clawsAreOne(Cat kitty) {
        kitty.setClaws(1);
    }

    public static void makeNewCat(Cat kitty) {
        Cat kitten = new Cat();
        kitten.setClaws(2);
        kitty = kitten;
        System.out.println("Value in makeNewCat scope of kitten " + kitten.getClaws());
        //Prints 2. the value pointed to by 'kitten' is 2
        System.out.println("Value in makeNewcat scope of kitty " + kitty.getClaws());
        //Prints 2. The local copy is being used within the scope of this method.
    }
}

class Cat {

    private int claws;

    public void setClaws(int i) {
        claws = i;
    }

    public int getClaws() {
        return claws;
    }
}

这可以在Ideone.com上运行。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1750106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档