1

在 CI 中可能会说

printf("%p",0x11194);
*((int *) 0x11194) = 30240;

(在这个例子中,我知道那个内存位置有一个整数)

请告诉我,我将如何在 Java 中做同样的事情?顺便说一句,我可能完全误解了记忆的工作原理

4

2 回答 2

2

可以使用sun.misc.UnsafeByteBuffer在 Java 中执行此操作。

但是,对于正常的 Java 使用,您根本不这样做。Java 会给你一个对象引用,它是一个对象的句柄。它不指向内存中的一个位置(JVM 可以在您不知道/不关心的情况下移动内存中的对象)并且您不能对它们执行算术运算(与指针不同)

于 2013-08-16T15:56:30.080 回答
1

你没有误解记忆是如何工作的。您只是假设 Java 会让您触摸它。它不会。内存和指针仍然存在,但必须通过正确的对象创建和取消引用来访问,而不是直接指针内存访问。

从好的方面来说,您不必担心释放不再需要的内存。

于 2013-08-16T15:44:39.773 回答