首先:是的,我知道存在类似的问题,但主要是使用其他语言或执行其他操作
我想打印出位于内存中的变量值。例如,确切的值,而不是变量名称。
对于整数值,我想打印出二进制中任何内容的二进制表示形式。这可以通过转换轻松完成,但我想使用内存中的值作为示例。
对于浮点值,我想再次准确地打印出内存中存储的内容,再次作为示例(用于研究论文演示)。
对于非原始值,我想打印出位于变量分配空间中的地址。
我该怎么做?它不一定必须使用“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
,值为true
或false
。没有定义内部表示,例如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/