java - Java中使用 ".printf(...)"打印内存中的值

标签 java variables memory floating-point printf

首先:是的,我知道存在类似的问题,但主要是使用其他语言或执行其他操作

我想打印出位于内存中的变量值。例如,确切的值,而不是变量名称。

对于整数值,我想打印出二进制中任何内容的二进制表示形式。这可以通过转换轻松完成,但我想使用内存中的值作为示例。

对于浮点值,我想再次准确地打印出内存中存储的内容,再次作为示例(用于研究论文演示)。

对于非原始值,我想打印出位于变量分配空间中的地址。

我该怎么做?它不一定必须使用“printf”方法;我记得有人向我提到可以使用“printf”来做到这一点。

有人提出,在 Java 中你无法访问内存中的地址。是否可以访问内存中的值本身来获取原始值?或者,我尝试切换到另一种语言会更好吗?

最佳答案

Java让您直接访问存储在内存中的任何内容。 JVM 可以自由地以其想要的任何形式存储任何值,只要它的行为如 Java Language Specification 中所述。 。所以你的要求是不可能的。

您可以获得一些“内部”值,但它可能不是内存中的值。

For an integer value, I would like to print out the binary representation of whatever is located in binary.

使用Long.toBinaryString(long)Integer.toBinaryString(int) .

For a floating-point value, I again would like to print out exactly what is stored in memory.

使用Double.doubleToRawLongBits(double)Float.floatToRawIntBits(float) ,然后按照上面的方法转换为二进制。

对于boolean,值为truefalse。没有定义内部表示,例如boolean[10] 可以存储为 10 个 64 位值 0 或 1(不太可能)、10 个字节(可能)或使用较低 10 位的 2 个字节。 JVM 的选择。

For a non-primitive value, I would like to print out the address located in the variable's allocated space.

不可能。如今,Java 引用通常在内部存储为 32 位 Compressed OOP ,但你无法得到它。

关于java - Java中使用 ".printf(...)"打印内存中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324488/

相关文章:

c - 在函数中声明在 int main() 中多次调用的变量(在 C 中)

java - 如何获取在 void 方法中实例化的对象?

带文件输入的 C 内存分配

c++ - 这行代码是如何工作的?

RAMdisk 上的 MySQL 内存引擎与 InnoDB

java - 使用 docker 的 Spring boot admin 解析 docker 主机名和 IP

java - 如何在 JDialog 中访问所有者 JFrame 的方法

java - Spring Cache - 使用自定义键更改其他缓存方法后,如何获取所有实际数据实体的列表?

java - 在cygwin中运行和编译java代码

xslt - 使用 XSLT 变量作为字段名称